<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8" />

<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta name="keywords" content="生活 艺术 编程">
<meta name="description" content="我们都要幸福！">
<meta name="theme-color" content="#e7f5ff">
<title>xyz&#39;s blog</title>
<link rel="shortcut icon" href="/favicon.ico?v=1600139201201">
<link rel="stylesheet" href="/media/css/gemini.css">
<link rel="stylesheet" href="/media/fonts/font-awesome.css">
<link
    href="//fonts.googleapis.com/css?family=Monda:300,300italic,400,400italic,700,700italic|Roboto Slab:300,300italic,400,400italic,700,700italic|Rosario:300,300italic,400,400italic,700,700italic|PT Mono:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext"
    rel="stylesheet" type="text/css">

<link href="/media/hljs/styles/googlecode.css"
    rel="stylesheet">

<link rel="stylesheet" href="/styles/main.css">

<script src="/media/hljs/highlight.js"></script>
<script src="https://cdn.jsdelivr.net/npm/velocity-animate@1.5.0/velocity.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/velocity-animate@1.5.0/velocity.ui.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css"
    integrity="sha384-zB1R0rpPzHqg7Kpt0Aljp8JPLqbXI3bhnPWROx27a9N0Ll6ZP/+DiW/UqRcLbRjq" crossorigin="anonymous">


<script>
    window.MathJax = {
        tex: {
            inlineMath: [['$', '$'], ["\\(", "\\)"]],
            displayMath: [['$$', '$$'], ["\\[", "\\]"]]
        },
        options: {
            skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code', 'a', 'annotation', 'annotation-xml'],
            ignoreHtmlClass: 'tex2jax_ignore|crayon-.*', // 'crayon-' 开头的类，属于Wordpress代码高亮库，这部分不需要处理，否则会导致显示不正确,这部分是正则式，多条之间用'|'分割
            processHtmlClass: 'tex2jax_process'
        },
        //禁用右键菜单	
        renderActions: {
            addMenu: [0, '', '']
        }
    };
</script>
<script type="text/javascript"
    src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>




<script>
    var _hmt = _hmt || [];
    (function () {
        var hm = document.createElement("script");
        hm.src = "https://hm.baidu.com/hm.js?f7006f36fe0759182b1d3cc50b20a743";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
    })();
</script>


  <meta name="description" content="我们都要幸福！">
</head>

<body>
  <div class="head-top-line"></div>
  <div class="header-box">
    
<div class="gemini">
  <header class="header  ">
    <div class="blog-header box-shadow-wrapper bg-color " id="header">
      <div class="nav-toggle" id="nav_toggle">
        <div class="toggle-box">
          <div class="line line-top"></div>
          <div class="line line-center"></div>
          <div class="line line-bottom"></div>
        </div>
      </div>
      <div class="site-meta">       
        <div class="site-title">
          
            <a href="/" class="brand">
              <span>xyz&#39;s blog</span>
            </a>  
          
        </div>
        
          <p class="subtitle">Appreciate the good, then it appreciates 🏃‍ </p>
        
      </div>
      <nav class="site-nav" id="site_nav">
        <ul id="nav_ul">
          
            
            
              
            
            <li class="nav-item ">
              
              
                
                  <a href="https://zxyfrank.gitee.io/" target="_self">
                    🏠 Home
                  </a>
                
              
            </li>
          
            
            
              
            
            <li class="nav-item ">
              
              
                
                  <a href="https://zxyfrank.gitee.io/archives/" target="_self">
                    📚 Archieves
                  </a>
                
              
            </li>
          
            
            
              
            
            <li class="nav-item ">
              
              
                
                  <a href="https://zxyfrank.gitee.io/tags/" target="_self">
                    🔖 Tags
                  </a>
                
              
            </li>
          
            
            
              
            
            <li class="nav-item ">
              
              
                
                  <a href="https://zxyfrank.gitee.io/post/about/" target="_self">
                    🧑 About
                  </a>
                
              
            </li>
          
            
            
              
            
            <li class="nav-item ">
              
              
                
                  <a href="https://zxyfrank.gitee.io/post/gallery/" target="_self">
                    🌞 Gallery
                  </a>
                
              
            </li>
          
          
            
              <li class="nav-item ">
                <a href="/friends/" target="_self">
                  
                    🔗 Links
                  
                </a>
              </li>
            
          
          
            <li id="fa_search" class="nav-item">
              <a href="javascript:void(0);">
                <i class="fa fa-search"></i> <span class="language" data-lan="search">搜索</span>
              </a>
            </li>
          
        </ul>
      </nav>
    </div>
  </header>
</div>

<script type="text/javascript"> 
 
  let showNav = true;

  let navToggle = document.querySelector('#nav_toggle'),
  siteNav = document.querySelector('#site_nav');
  
  function navClick() {
    let sideBar = document.querySelector('.sidebar');
    let navUl = document.querySelector('#nav_ul');
    navToggle.classList.toggle('nav-toggle-active');
    siteNav.classList.toggle('nav-menu-active');
    if (siteNav.classList.contains('nav-menu-active')) {
      siteNav.style = "height: " + (navUl.children.length * 42) +"px !important";
    } else {
      siteNav.style = "";
    }
  }

  navToggle.addEventListener('click',navClick);  
</script>
  </div>
  <div class="main-continer">
    
    <div
      class="section-layout  gemini">
      <div class="section-layout-wrapper">
        <div id="sidebarMeta" class="sidebar">
    
<div class="sidebar-wrapper box-shadow-wrapper bg-color">
  <div class="sidebar-item">
    <img class="site-author-image right-motion" src="/images/avatar.png"/>
    <p class="site-author-name">Frank</p>
    
    <div class="site-description right-motion">
      
      
      
        <p>感谢身边的每一个人</p>
      
        <p>希望我们都天天开心</p>
      
        <p>Appreciate everyone around us❤️ </p>
      
        <p>Enjoy ourselves 😀</p>
      
      
    </div>
    
  </div>
  <div class="sidebar-item side-item-stat right-motion">
    <div class="sidebar-item-box">
      <a href="/archives/">
        
        <span class="site-item-stat-count">14</span>
        <span class="site-item-stat-name language" data-lan="article">文章</span>
      </a>
    </div>
    <div class="sidebar-item-box">
      <a href="">
        <span class="site-item-stat-count">8</span>
        <span class="site-item-stat-name language" data-lan="category">分类</span>
      </a>
    </div>
    <div class="sidebar-item-box">
      <a href="/tags/">
        <span class="site-item-stat-count">8</span>
        <span class="site-item-stat-name language" data-lan="tag">标签</span>
      </a>
    </div>
  </div>
  
    
      <div class="sidebar-item">
        <span class="site-item-rss">
            <i class="fa fa-rss"></i>
            <a href="https://ZXYFrank.gitee.io/atom.xml" target="_blank">RSS</a>
        </span>
      </div>
    
  
  



</div>
</div>
<script>
  let sidebarMeta = document.querySelector('#sidebarMeta');
  let scheme = 'gemini';
  let sidebarWrapper = document.querySelector('.sidebar-wrapper');
  if (sidebarMeta && (scheme === 'pisces' || scheme === 'gemini')) {
    document.addEventListener('scroll', function(e) {
      if (document.scrollingElement.scrollTop > parseInt(sidebarMeta.style.marginTop) + 10) {
        sidebarWrapper.classList.add('home-sidebar-fixed')
      } else {
        sidebarWrapper.classList.remove('home-sidebar-fixed')
      }
    });
  }
  </script>
        <div class="section-box box-shadow-wrapper">
          <section class="section archives-section bg-color posts-expand">
            

<div class="bg-color">
  <div class="archive-timeline-box">
    <div class="archive-timeline-title">
      
        <h2 class="language" data-lan="archives" data-count="14">非常好！目前共计14篇日志，继续努力！</h2>
      
    </div>
    
      
      
        <div class="node-title">
          <h2 class="tag-year">2020</h2>
        </div>    
        
      
      <a href="https://ZXYFrank.gitee.io/post/you-ya-di-pei-zhi-windows-de-ge-chong-kuai-jie-fang-shi/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              09-15
              <small>优雅地配置Windows 的各种快捷方式</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/ru-he-chao-ku-di-cao-zuo-windows-terminal/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              09-15
              <small>如何超酷地操作Windows Terminal</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/leetcode-1-20/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              09-14
              <small>LeetCode 1-20</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/double-dao-int-de-jing-du-zhuan-huan-wen-ti/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              09-13
              <small>double 到 int 的精度转换问题</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/jian-zhi-offer-shua-ti-ji-lu/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              08-20
              <small>《剑指offer》 刷题记录</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/dsa-2020-81-810/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              08-11
              <small>DSA 2020 8.1-8.10</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/linear-algebra-xian-xing-dai-shu/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              08-03
              <small>Linear Algebra 线性代数</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/hong-lou-meng-du-hou-gan/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              08-03
              <small>红楼梦 读后感</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/dsa-2020-7/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              08-02
              <small>DSA 2020-7</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/xiao-lu/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              07-25
              <small>Get your Job DONE！摒弃完美主义💪</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/cai-yong-gitee-pages-gridea-pi-chu-li-da-jian-ge-ren-zhu-ye-win10/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              07-24
              <small>采用Gitee Pages + Gridea + 批处理 搭建个人主页(win10)</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/gallery/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              07-24
              <small>Gallery</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/tian-wen/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              07-24
              <small>天问</small>
            </h1>
          </div>  
      </div>
      </a>
    
      
      
      <a href="https://ZXYFrank.gitee.io/post/about/">
        <div class="motion-warpper tag-archive-node">
          <div class="tag-node">
            <h1>
              07-23
              <small>你好呀~Hello 😀</small>
            </h1>
          </div>  
      </div>
      </a>
    
  </div>
  
<div class="page bg-color">
  <ul class="pagination-ul">
    
    
      
        <li class="pagination-li pagination-active">
            <a href="/archives/page/../">
              1
            </a>
        </li>
      
    
    
  </ul>
</div>
</div>

          </section>
        </div>
      </div>
    </div>
    <div class="footer-box">
  <footer class="footer">
    <div class="copyright">
      Powered by <a href="https://github.com/getgridea/gridea" target="_blank">Gridea</a> | © 2019-2020 Theme By <a
        href="https://github.com/hsxyhao/gridea-theme-next" target="_blank">HsxyHao</a>
    </div>
    <div class="poweredby">
      
    </div>
  </footer>
  
  
  <div class="gemini back-to-top" id="back_to_top">
    <i class="fa fa-arrow-up"></i>
    
    <span class="scrollpercent">
      <span id="back_to_top_text">0</span>%
    </span>
    
  </div>
  
  
  
  <div class="bg-img">
    <img src="/media/images/Santorini.jpg" />
  </div>
  
  
  
  
</div>
<script>

  let sideBarOpen = 'sidebar-open';
  let body = document.body;
  let back2Top = document.querySelector('#back_to_top'),
    back2TopText = document.querySelector('#back_to_top_text'),
    drawerBox = document.querySelector('#drawer_box'),
    rightSideBar = document.querySelector('.sidebar'),
    viewport = document.querySelector('body');

  function scrollAnimation(currentY, targetY) {

    let needScrollTop = targetY - currentY
    let _currentY = currentY
    setTimeout(() => {
      const dist = Math.ceil(needScrollTop / 10)
      _currentY += dist
      window.scrollTo(_currentY, currentY)
      if (needScrollTop > 10 || needScrollTop < -10) {
        scrollAnimation(_currentY, targetY)
      } else {
        window.scrollTo(_currentY, targetY)
      }
    }, 1)
  }

  back2Top.addEventListener("click", function (e) {
    scrollAnimation(document.scrollingElement.scrollTop, 0);
    e.stopPropagation();
    return false;
  });

  window.addEventListener('scroll', function (e) {
    let percent = document.scrollingElement.scrollTop / (document.scrollingElement.scrollHeight - document.scrollingElement.clientHeight) * 100;
    if (percent > 1 && !back2Top.classList.contains('back-top-active')) {
      back2Top.classList.add('back-top-active');
    }
    if (percent == 0) {
      back2Top.classList.remove('back-top-active');
    }
    if (back2TopText) {
      back2TopText.textContent = Math.floor(percent);
    }
  });


  let hasCacu = false;
  window.onresize = function () {
    calcuHeight();
  }

  function calcuHeight() {
    // 动态调整站点概览高度
    if (!hasCacu && back2Top.classList.contains('pisces') || back2Top.classList.contains('gemini')) {
      let sideBar = document.querySelector('.sidebar');
      let navUl = document.querySelector('#site_nav');
      sideBar.style = 'margin-top:' + (navUl.offsetHeight + navUl.offsetTop + 15) + 'px;';
      hasCacu = true;
    }
  }
  calcuHeight();

  let open = false, MOTION_TIME = 300, RIGHT_MOVE_DIS = '320px';

  if (drawerBox) {
    let rightMotions = document.querySelectorAll('.right-motion');
    let right = drawerBox.classList.contains('right');

    let transitionDir = right ? "transition.slideRightIn" : "transition.slideLeftIn";

    let openProp, closeProp;
    if (right) {
      openProp = {
        paddingRight: RIGHT_MOVE_DIS
      };
      closeProp = {
        paddingRight: '0px'
      };
    } else {
      openProp = {
        paddingLeft: RIGHT_MOVE_DIS
      };
      closeProp = {
        paddingLeft: '0px'
      };
    }

    drawerBox.onclick = function () {
      open = !open;
      window.Velocity(rightSideBar, 'stop');
      window.Velocity(viewport, 'stop');
      window.Velocity(rightMotions, 'stop');
      if (open) {
        window.Velocity(rightSideBar, {
          width: RIGHT_MOVE_DIS
        }, {
          duration: MOTION_TIME,
          begin: function () {
            window.Velocity(rightMotions, transitionDir, {});
          }
        })
        window.Velocity(viewport, openProp, {
          duration: MOTION_TIME
        });
      } else {
        window.Velocity(rightSideBar, {
          width: '0px'
        }, {
          duration: MOTION_TIME,
          begin: function () {
            window.Velocity(rightMotions, {
              opacity: 0
            });
          }
        })
        window.Velocity(viewport, closeProp, {
          duration: MOTION_TIME
        });
      }
      for (let i = 0; i < drawerBox.children.length; i++) {
        drawerBox.children[i].classList.toggle('muse-line');
      }
      drawerBox.classList.toggle(sideBarOpen);
    }
  }

  // 链接跳转
  let newWindow = 'true'
  if (newWindow === 'true') {
    let links = document.querySelectorAll('.post-body a')
    links.forEach(item => {
      if (!item.classList.contains('btn')) {
        item.setAttribute("target", "_blank");
      }
    })
  }

  let faSearch = document.querySelector('#fa_search');
  faSearch.addEventListener('click', function () {
    document.querySelector('#search_mask').style = ''
  })

  // 代码高亮
  hljs.initHighlightingOnLoad();
  
  // 离开当前页title变化
  var leaveTitle = "";
  if (leaveTitle) {
    document.addEventListener('visibilitychange', function () {
      if (document.visibilityState == 'hidden') {
        normal_title = document.title;
        document.title = leaveTitle;
      } else {
        document.title = normal_title;
      }
    });
  }

</script>
  </div>
</body>

<div class="search-mask" id="search_mask" style="display: none;">
  <div class="search-box">
    <div class="search-title">
      <i class="fa fa-search"></i>
      <div class="input-box">
        <input id="search" type="text" class="language" data-lan="search" placeholder="搜索">
      </div>
      <i id="close" class="fa fa-times-circle"></i>
    </div>
    <div class="stat-box">
      <span id="stat_count">0</span><span class="language" data-lan="stat">条相关条目，使用了</span><span id="stat_times">0</span><span class="language" data-lan="stat-time">毫秒</span>
      <hr>
    </div>
    <div class="result" id="result">
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/you-ya-di-pei-zhi-windows-de-ge-chong-kuai-jie-fang-shi/"" data-c="
          &lt;h1 id=&#34;右键菜单&#34;&gt;右键菜单&lt;/h1&gt;
&lt;h2 id=&#34;添加到右键菜单&#34;&gt;添加到右键菜单&lt;/h2&gt;
&lt;p&gt;类似这样的操作可以添加一个右键菜单项（包含图标）&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\wt]
@=&amp;quot;Windows terminal here&amp;quot;
&amp;quot;Icon&amp;quot;=&amp;quot;C:\\Users\\Frank\\Pictures\\terminal.ico&amp;quot;

[HKEY_CLASSES_ROOT\Directory\Background\shell\wt\command]
@=&amp;quot;C:\\Users\\Frank\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;添加到shift-right-click-菜单&#34;&gt;添加到Shift + right-click 菜单&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;以管理员身份运行&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.jianshu.com/p/183d173ed580&#34;&gt;Windows10 Shift+右键 添加打开管理员Powershell窗口&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.bbsmax.com/A/KE5Qjn9qdL/&#34;&gt;Windows10文件目录下添加 Shift+右键打开管理员Powershell窗口&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/huaieli1/article/details/81118723&#34;&gt;CMD 以管理员身份启动程序的方法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;code&gt;runas /noprofile /user:Administrator cmd
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;貌似可以在cmd当中提升权限&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;win-x-快捷菜单&#34;&gt;Win + X 快捷菜单&lt;/h1&gt;
&lt;p&gt;下载一个优秀的编辑软件&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.techjunkie.com/edit-power-user-menu-winx-menu/&#34;&gt;教程在此&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;如何添加管理员权限&#34;&gt;如何添加管理员权限&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;C:\Users\[YOUR_NAME]\AppData\Local\Microsoft\Windows\WinX\Group3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当中，可以看到很多快捷方式&lt;/p&gt;
&lt;p&gt;问题变成了如何以管理员身份运行一个程序：右键属性设置即可&lt;/p&gt;
">优雅地配置Windows 的各种快捷方式</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/ru-he-chao-ku-di-cao-zuo-windows-terminal/"" data-c="
          &lt;h1 id=&#34;windows-terminal&#34;&gt;Windows Terminal&lt;/h1&gt;
&lt;p&gt;从Microsoft Store 安装&lt;/p&gt;
&lt;p&gt;配置的时候一定要从打开配置文件，否则可能没有权限&lt;/p&gt;
&lt;h1 id=&#34;shortcuts&#34;&gt;Shortcuts&lt;/h1&gt;
&lt;h3 id=&#34;右键管理员身份-sudo&#34;&gt;右键管理员身份 / sudo&lt;/h3&gt;
&lt;h3 id=&#34;添加到win-x菜单&#34;&gt;&lt;a href=&#34;https://www.techjunkie.com/edit-power-user-menu-winx-menu/&#34;&gt;添加到Win + X菜单&lt;/a&gt;&lt;/h3&gt;
&lt;h1 id=&#34;themes&#34;&gt;Themes&lt;/h1&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\wt]
@=&amp;quot;Windows terminal here&amp;quot;
&amp;quot;Icon&amp;quot;=&amp;quot;C:\\Users\\Frank\\Pictures\\terminal.ico&amp;quot;

[HKEY_CLASSES_ROOT\Directory\Background\shell\wt\command]
@=&amp;quot;C:\\Users\\Frank\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe&amp;quot;

&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;vim&#34;&gt;Vim&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/qq_37933114/article/details/82932840&#34;&gt;win10-PowerShell下使用vim&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;win-x-menu&#34;&gt;&lt;a href=&#34;https://www.techjunkie.com/edit-power-user-menu-winx-menu/&#34;&gt;Win + X menu&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_39858881/article/details/107026065&#34;&gt;Windows Terminal 使用管理员身份创建标签页&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注意：如果&lt;code&gt;raw.githubusercontent.com&lt;/code&gt;无法访问，可以手动把.ps1文件保存下来，更改如下命令当中的文件位置即可&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;PowerShell -Command &amp;quot;Set-ExecutionPolicy RemoteSigned -scope Process; iwr -useb https://raw.githubusercontent.com/gerardog/gsudo/master/installgsudo.ps1 | iex&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
">如何超酷地操作Windows Terminal</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/leetcode-1-20/"" data-c="
          ">LeetCode 1-20</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/double-dao-int-de-jing-du-zhuan-huan-wen-ti/"" data-c="
          &lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;#include&amp;lt;stdio.h&amp;gt;
int main(){
	double a = 1;
	double b = 1.2;
	double c = 1.00;
	double d = 1.02;
	double e = 5;
	double f = 6.01;
	printf(&amp;quot;double %f -&amp;gt; %d\n&amp;quot;,a,a);
	printf(&amp;quot;double %f -&amp;gt; %d\n&amp;quot;,b,b);
	printf(&amp;quot;double %f -&amp;gt; %d\n&amp;quot;,c,c);
	printf(&amp;quot;double %f -&amp;gt; %d\n&amp;quot;,d,d);
	printf(&amp;quot;double %f -&amp;gt; %d\n&amp;quot;,e,e);
	printf(&amp;quot;double %lf -&amp;gt; %d\n&amp;quot;,f,f);
	printf(&amp;quot;(int)double %f -&amp;gt; %d\n&amp;quot;,a,(int)a);
	printf(&amp;quot;(int)double %f -&amp;gt; %d\n&amp;quot;,b,(int)b);
	printf(&amp;quot;(int)double %f -&amp;gt; %d\n&amp;quot;,c,(int)c);
	printf(&amp;quot;(int)double %f -&amp;gt; %d\n&amp;quot;,d,(int)d);
	printf(&amp;quot;(int)double %f -&amp;gt; %d\n&amp;quot;,e,(int)e);
	printf(&amp;quot;(int)double %f -&amp;gt; %d\n&amp;quot;,f,(int)f);
	return 0;
} 
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;double 1.000000 -&amp;gt; 0
double 1.200000 -&amp;gt; 858993459
double 1.000000 -&amp;gt; 0
double 1.020000 -&amp;gt; -2061584302
double 5.000000 -&amp;gt; 0
double 6.010000 -&amp;gt; 1889785610
(int)double 1.000000 -&amp;gt; 1
(int)double 1.200000 -&amp;gt; 1
(int)double 1.000000 -&amp;gt; 1
(int)double 1.020000 -&amp;gt; 1
(int)double 5.000000 -&amp;gt; 5
(int)double 6.010000 -&amp;gt; 6
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;1.2在内存中是以double类型存储的，具有64位的长度，但是%d输出时只能截取低32位进行输出。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/rockpk008/article/details/47189267&#34;&gt;printf中用%d输出float或者double&lt;/a&gt;&lt;/p&gt;
">double 到 int 的精度转换问题</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/jian-zhi-offer-shua-ti-ji-lu/"" data-c="
          &lt;h1 id=&#34;day1-9&#34;&gt;day1 / 9&lt;/h1&gt;
&lt;h2 id=&#34;剑指-offer-34-二叉树中和为某一值的路径&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/&#34;&gt;剑指 Offer 34. 二叉树中和为某一值的路径&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;输入：&lt;/p&gt;
&lt;p&gt;[-2,null,-3] -5&lt;/p&gt;
&lt;p&gt;输出：&lt;/p&gt;
&lt;p&gt;[]&lt;/p&gt;
&lt;p&gt;预期结果：&lt;/p&gt;
&lt;p&gt;[[-2,-3]]&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if(l &amp;lt; 0 || node == nullptr)return;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;改成&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;if(node == nullptr)return;
temppath.push_back(node-&amp;gt;val);
l -= node-&amp;gt;val;
if(!node-&amp;gt;left &amp;amp;&amp;amp; !node-&amp;gt;right &amp;amp;&amp;amp; !l){
  ans.push_back(temppath);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;紧贴题意：叶子节点 &amp;amp; 为0&lt;/p&gt;
&lt;p&gt;🤔 如果写成&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;if(!node-&amp;gt;left &amp;amp;&amp;amp; !node-&amp;gt;right){
 if(l==0){
     ans.push_back(temppath);
 }
 return;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;会快很多&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;剑指-offer-03-数组中重复的数字&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/&#34;&gt;剑指 Offer 03. 数组中重复的数字&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;数组中重复u1u次的元素&#34;&gt;数组中重复&lt;u&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/u&gt;次的元素&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;❗️异或运算和顺序无关，甚至可以并行实现&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;数组中u2个重复1次u的元素&#34;&gt;数组中&lt;u&gt;&lt;strong&gt;2个重复1次&lt;/strong&gt;&lt;/u&gt;的元素&lt;/h3&gt;
&lt;ul class=&#34;contains-task-list&#34;&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input class=&#34;task-list-item-checkbox&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-7468938&#34;&gt; &lt;a href=&#34;https://zhuanlan.zhihu.com/p/26890617&#34;&gt;干货！史上最强位运算面试题大总结！ - 九章算法的文章 - 知乎&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-7468938&#34;&gt; [干货！史上最强位运算面试题大总结！ - 九章算法的文章 - 知乎](https://zhuanlan.zhihu.com/p/26890617)&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/darlinFly/p/9545945.html&#34;&gt;位运算解决“一个数组中，只有一个数字出现n次，其他数字出现k次”问题&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;给你1-1000个连续自然数然后从中随机去掉两个再打乱顺序要求只遍历一次求出被去掉的两个&#34;&gt;给你1-1000个连续自然数，然后从中随机去掉两个，再打乱顺序，要求只遍历一次，求出被去掉的两个。&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;———[x]——[y]———&lt;/code&gt;(1)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;————————&lt;/code&gt;(2)&lt;/p&gt;
&lt;p&gt;然后(1)(2)合并，采用 &lt;a href=&#34;###%E6%95%B0%E7%BB%84%E4%B8%AD%E4%B8%A4%E4%B8%AA%E9%87%8D%E5%A4%8D%E4%B8%A4%E6%AC%A1%E7%9A%84%E5%85%83%E7%B4%A0&#34;&gt;数组中两个重复两次的元素&lt;/a&gt;的思路即可&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/Kobe10/p/6306183.html&#34;&gt;详细的分析&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;元素重复3次的数组中查找重复1次的元素&#34;&gt;&lt;a href=&#34;https://blog.csdn.net/github_33393668/article/details/102468958&#34;&gt;元素重复3次的数组中查找重复1次的元素&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/github_33393668/article/details/102468958&#34;&gt;采用位运算推导&lt;/a&gt;、&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;1&#34;&gt;&lt;img src=&#34;https://pic.leetcode-cn.com/0a7ea5bca055b095673620d8bb4c98ef6c610a22f999294ed11ae35d43621e93-Picture3.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/solution/mian-shi-ti-56-ii-shu-zu-zhong-shu-zi-chu-xian-d-4/&#34;&gt;力扣题解&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/ge1mina023/article/details/51727883&#34;&gt;题解：非异或思路，采用分解拼装的思路，32-bit Integer 复杂度 O(32n)&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;元素重复k次的数组中查找重复1次的元素&#34;&gt;元素重复k次的数组中查找重复1次的元素&lt;/h3&gt;
&lt;h2 id=&#34;剑指-offer-07-重建二叉树&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/&#34;&gt;剑指 Offer 07. 重建二叉树&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;剑指-offer-05-替换空格&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/&#34;&gt;剑指 Offer 05. 替换空格&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;主动和面试官询问内存要求&lt;/li&gt;
&lt;li&gt;对内存覆盖要有敏锐的感觉
&lt;ul&gt;
&lt;li&gt;数组的数据移动需要时间&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;剑指-offer-08-在二叉树中找到一个节点的后继节点&#34;&gt;&lt;a href=&#34;https://www.nowcoder.com/questionTerminal/c37ec6a9e4084b9c943be2d3a369e177&#34;&gt;剑指 Offer 08 在二叉树中找到一个节点的后继节点&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;对中序遍历的理解
&lt;ul&gt;
&lt;li&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200811171704.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200811172004.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;node* s;
if(q-&amp;gt;r != null){	
    // 存在右子树
    s = q-&amp;gt;r;
    while(s-&amp;gt;l)s = s-&amp;gt;l;
}else{
    // 没有右子树，下一个节点是“将当前节点包含于其左子树中的最低祖先”
    s = q-&amp;gt;parent;
    // 需要将根节点的祖先设置为一个特殊值
    while(s-&amp;gt;parent &amp;amp;&amp;amp; s-&amp;gt;parent-&amp;gt;right == s)s = s-&amp;gt;parent;
    s = s-&amp;gt;parent; // 如果是根节点，则返回的是特殊值
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-09-用两个栈实现队列&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/&#34;&gt;剑指 Offer 09. 用两个栈实现队列&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;栈混洗&#34;&gt;&lt;a href=&#34;https://blog.csdn.net/qq_37291934/article/details/88607246&#34;&gt;栈混洗&lt;/a&gt;&lt;/h3&gt;
&lt;ul class=&#34;contains-task-list&#34;&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input class=&#34;task-list-item-checkbox&#34; checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-244901&#34;&gt; &lt;a href=&#34;https://pintia.cn/problem-sets/994805046380707840/problems/1111914599412858889&#34;&gt;PTA 彩虹瓶&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-244901&#34;&gt; [PTA 彩虹瓶](https://pintia.cn/problem-sets/994805046380707840/problems/1111914599412858889)&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;// https://pintia.cn/problem-sets/994805046380707840/problems/1111914599412858889
// 彩虹瓶 栈混洗
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;stack&amp;gt;
using namespace std;
const int N = 1000 + 100;
int n,m,nn;
int a[N];
stack&amp;lt;int &amp;gt; s;
int main(){
	scanf(&amp;quot;%d %d %d&amp;quot;,&amp;amp;n,&amp;amp;m,&amp;amp;nn);
	while(nn--){
		for(int i =0;i&amp;lt;n;i++){
			scanf(&amp;quot;%d&amp;quot;,&amp;amp;a[i]);
		}
		int b = 1;
		int cura = 0;
		bool r = true;
		while(b&amp;lt;=n){
			if(a[cura] == b){
				cura++;b++; 
			}else{
				if(!s.empty()&amp;amp;&amp;amp;s.top() == b){
					// 从s 中弹出 
					b++;s.pop();
				}else if(s.empty() || !s.empty() &amp;amp;&amp;amp; s.top() != b){
					if(cura&amp;gt;=n){
						r = false; break;
					}
					s.push(a[cura++]);
					if(s.size()&amp;gt;m){
						r = false;break;
					}
				}
			}
		}
		if(r)printf(&amp;quot;YES\n&amp;quot;);
		else printf(&amp;quot;NO\n&amp;quot;);
		while(!s.empty())s.pop();
	}
} 
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-10-ii-青蛙跳台阶问题&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/&#34;&gt;剑指 Offer 10- II. 青蛙跳台阶问题&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;记忆化搜索&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;star剑指-offer-68-ii-二叉树的最近公共祖先&#34;&gt;⭐️&lt;a href=&#34;https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/&#34;&gt;剑指 Offer 68 - II. 二叉树的最近公共祖先&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;这道题在力扣里面是简单 / 中等题，但是仍然可以学到很多东西&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;关键是要积极思考&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注意到，这里二叉树的最近公共祖先有一个很好的性质——唯一性&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;dfs的在树当中&lt;u&gt;&lt;em&gt;&lt;strong&gt;从根节点开始&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;不会两次打开同一个节点，时间复杂度可以比较好地保证，空间复杂度也可以做到 &lt;code&gt;O(logn)（平均）~O(n)&lt;/code&gt;之间&lt;/p&gt;
&lt;p&gt;但是问题在于，dfs的单次遍历需要返回一个有助于上层决策的值，或者修改某全局变量&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;全局找到答案时，也就时找到了唯一必然存在的一个答案，可以想象成找到了一个永远无法被打败的擂主&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个题目当中，每一个节点可以向上返回四个值 lp,rp,lq,rq&lt;/p&gt;
&lt;p&gt;（当然，在java当中这样的返回看上去有点不太方便，在C当中使用指针能比较方便地实现）&lt;/p&gt;
&lt;p&gt;他们满足&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;lp &amp;amp;&amp;amp; rp == 0;
lq &amp;amp;&amp;amp; rq == 0;
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    if(root == null || root == p || root == q)return root;
    TreeNode left = lowestCommonAncestor(root.left,p,q);
    TreeNode right = lowestCommonAncestor(root.right,p,q);
    if(left == null)return right;
    if(right == null)return left;
    return root;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;😆 这段代码太漂亮了！&lt;/p&gt;
&lt;p&gt;也可以这样实现&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;TreeNode ans;
boolean dfs(TreeNode root, TreeNode p, TreeNode q){
    if(root == null) return false;
    boolean ll = dfs(root.left,p,q);
    boolean rr = dfs(root.right,p,q);
    boolean self = root== p || root== q;
    if(ans == null &amp;amp;&amp;amp; (ll&amp;amp;rr)|| self &amp;amp;&amp;amp; (ll || rr)){
        ans = root;
    }
    return ll || rr || self;
}
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
    ans = null;
    dfs(root,p,q);
    return ans;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;扩展阅读&#34;&gt;扩展阅读&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cppblog.com/Icyflame/archive/2009/07/04/88987.html&#34;&gt;LCA问题（含RMQ的ST算法）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/enjoy_pascal/article/details/78277008?utm_medium=distribute.wap_relevant.none-task-blog-BlogCommendFromBaidu-7.nonecase&amp;amp;depth_1-utm_source=distribute.wap_relevant.none-task-blog-BlogCommendFromBaidu-7.nonecase&#34;&gt;对LCA、树上倍增、树链剖分（重链剖分&amp;amp;长链剖分）和LCT（Link-Cut Tree）的学习&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://oi-wiki.org/graph/lca/&#34;&gt;OI WIKI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;day2-to-21&#34;&gt;day2 / to 21&lt;/h1&gt;
&lt;h2 id=&#34;剑指-offer-52-两个链表的第一个公共节点&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/&#34;&gt;剑指 Offer 52. 两个链表的第一个公共节点&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;双指针是比较巧妙的方法&lt;/p&gt;
&lt;p&gt;但是有更直观的方法&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;辅助栈实现&lt;u&gt;&lt;em&gt;&lt;strong&gt;链表倒序遍历&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;（这也是很基础却很重要的一种思想，类似于拓扑排序实现bfs）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;双指针的等价做法&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;设定两个指针分别指向两个链表头部，一起向前走直到其中一个到达末端，另一个与末端距离则是两链表的 长度差。再通过长链表指针先走的方式消除长度差，最终两链表即可同时走到相交点。&lt;/p&gt;
&lt;p&gt;作者：jyd&lt;br&gt;
链接：https://leetcode-cn.com/problems/intersection-of-two-linked-lists/solution/intersection-of-two-linked-lists-shuang-zhi-zhen-l/&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;4&#34;&gt;&lt;img src=&#34;https://pic.leetcode-cn.com/462d77ca078a7fab19e4123dd2d62d1e51191424e3f363c4935f4e06360fa5d8-%E5%B9%BB%E7%81%AF%E7%89%875.JPG&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;5&#34;&gt;&lt;img src=&#34;https://pic.leetcode-cn.com/51d1c09be07b6315d196272c35bc859fefff8c92e08af93605e0aedba634acbf-%E5%B9%BB%E7%81%AF%E7%89%876.JPG&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;6&#34;&gt;&lt;img src=&#34;https://pic.leetcode-cn.com/be37b827f0255fdc2c13ece5f10852205d6e5c0022124fad0e1c8741bff8ae97-%E5%B9%BB%E7%81%AF%E7%89%877.JPG&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h2 id=&#34;剑指-offer-11-旋转数组的最小数字&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/&#34;&gt;剑指 Offer 11. 旋转数组的最小数字&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;剑指-offer-12-矩阵中的路径&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/&#34;&gt;剑指 Offer 12. 矩阵中的路径&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;int n;
int m;
boolean[][] vis;
boolean dfs(char[][] board,int i, int j,String word,int cur){
    if(i&amp;lt;0||j&amp;lt;0||i&amp;gt;=n||j&amp;gt;=m )return false;
    if(board[i][j] != word.charAt(cur) || vis[i][j])return false;
    vis[i][j] = true;
    if(cur == word.length()-1)return true;
    return dfs(board,i+1,j,word,cur+1)||dfs(board,i-1,j,word,cur+1)||dfs(board,i,j+1,word,cur+1)||dfs(board,i,j-1,word,cur+1);
}
public boolean exist(char[][] board, String word) {
    n = board.length;
    if(n == 0)return false;
    m = board[0].length;
    for(int i = 0;i&amp;lt;n;i++){
        for(int j = 0;j&amp;lt;m;j++){
            if(board[i][j] == word.charAt(0)){
                vis = new boolean[n+100][m+100];
                if(dfs(board,i,j,word,0))return true;
            }
        }
    }
    return false;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面有一个 &lt;code&gt;vis&lt;/code&gt;没有复原的错误&lt;/p&gt;
&lt;p&gt;应该是&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;vis[i][j] = true;
boolean r = dfs(board,i+1,j,word,cur+1)||dfs(board,i-1,j,word,cur+1)||dfs(board,i,j+1,word,cur+1)||dfs(board,i,j-1,word,cur+1);
vis[i][j] = false;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-14-i-剪绳子&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/jian-sheng-zi-lcof/&#34;&gt;剑指 Offer 14- I. 剪绳子&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/integer-break/solution/zheng-shu-chai-fen-by-leetcode-solution/&#34;&gt;官方题解&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;剑指-offer-15-二进制中1的个数&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/&#34;&gt;剑指 Offer 15. 二进制中1的个数&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;int tot = 0;
while(n!=0){
    tot++;
    n&amp;amp;=(n-1);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;❗️&lt;strong&gt;移位运算有算术移位和逻辑移位之分&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;while(n)if(n &amp;amp; 1)tot ++,n &amp;gt;&amp;gt;= 1;&lt;/code&gt;的方法可能会涉及符号位1移入的问题。&lt;/p&gt;
&lt;p&gt;可以考虑进行无符号数强转；&lt;code&gt;uint32_t nn = (uint32_t)n;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;如果采用 &lt;code&gt;n&amp;amp;(1&amp;lt;&amp;lt;i)&lt;/code&gt;的判断方法则可以避免涉及符号问题&lt;/p&gt;
&lt;h2 id=&#34;剑指-offer-16-数值的整数次方&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/&#34;&gt;剑指 Offer 16. 数值的整数次方&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;at line 3, Solution.myPow&lt;/p&gt;
&lt;p&gt;最后执行的输入：&lt;/p&gt;
&lt;p&gt;1.00000 &lt;strong&gt;&lt;code&gt;-2147483648&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;反转之后溢出……，可以抽出一个因子来&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;if(n&amp;lt;0)return (1/x)*myPow(x,-(n+1));
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-17-打印从1到最大的n位数&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/&#34;&gt;剑指 Offer 17. 打印从1到最大的n位数&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;对大数问题的敏感性&lt;/li&gt;
&lt;li&gt;大数高精度加法&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;剑指-offer-18-删除链表的节点&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/&#34;&gt;剑指 Offer 18. 删除链表的节点&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;o1平均复杂度完成链表节点删除&#34;&gt;&lt;code&gt;O(1)&lt;/code&gt;平均复杂度完成链表节点删除&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;cur.next = cur.next.next;
cur.val = cur.next.val;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;if(cur == head){
	head = cur.next;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;if(cur.next == null){
	// O(n 遍历找到前序节点)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;剑指-offer-21-调整数组顺序使奇数位于偶数前面&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/&#34;&gt;剑指 Offer 21. 调整数组顺序使奇数位于偶数前面&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;public int[] exchange(int[] nums) {
    int n = nums.length;
    int i1 = 0;
    int i2 = n-1;
    while(i1&amp;lt;i2){
        while(i1&amp;lt;n &amp;amp;&amp;amp; nums[i1]%2==1)i1++;
        if(i1 == n)return nums;
        if(nums[i1]%2 == 0){
            while(i2&amp;gt;0 &amp;amp;&amp;amp; nums[i2]%2 == 0 &amp;amp;&amp;amp; i2&amp;gt;i1){
                i2--;
            }
            int temp = nums[i2];nums[i2] = nums[i1];nums[i1] = temp;
            i1++;i2--;
        }
    }
    return nums;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以换成这样简洁的代码&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;while(i&amp;lt;j){
    while(i&amp;lt;j &amp;amp;&amp;amp; nums[i]%2==1)i++;
    while(i&amp;lt;j &amp;amp;&amp;amp; nums[j]%2==0)j--;
    temp = nums[i];nums[i] = nums[j];nums[j] = temp;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:happy:这其实也是快排当中哨兵的思想，哨兵单向移动，本身就可以做界限&lt;/p&gt;
&lt;h3 id=&#34;快排模板&#34;&gt;快排模板&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;void qsort(int[]arr,int l,int r){
    if(l&amp;gt;=r)return;
    int i = l + 1,j = r,mid = (l+r)/2;
    // Sherwood随机化
	swap(a[l],a[mid]);
    while(i&amp;lt;j){
        while(i&amp;lt;j&amp;amp;&amp;amp;a[j]&amp;gt;=p)j--;
        while(i&amp;lt;j&amp;amp;&amp;amp;a[i]&amp;lt;=p)i++;
        swap(a[i],a[j]);
    }
    swap(a[l],a[i]);
    qsort(a,l,mid-1);
    qsort(a,mid+1,r);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;为什么不可以随机化为 &lt;code&gt;i = l+1&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;这样就违背了&lt;code&gt;i&lt;/code&gt;先走的原则！&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;为什么最后保证 &lt;code&gt;a[l]&lt;/code&gt;还可以和轴点交换？
&lt;ul&gt;
&lt;li&gt;因为如果 &lt;code&gt;a[l]&lt;/code&gt;被改变，只有一种情况：&lt;code&gt;a[l]&lt;/code&gt;就是最小元素，因为如果不是最小元素，&lt;code&gt;i&lt;/code&gt;一定可以跳过&lt;code&gt;l&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;day3&#34;&gt;day3&lt;/h1&gt;
&lt;blockquote&gt;
&lt;h2 id=&#34;鲁棒性&#34;&gt;&lt;strong&gt;鲁棒性&lt;/strong&gt;&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;star剑指-offer-20-表示数值的字符串&#34;&gt;⭐️&lt;a href=&#34;https://leetcode-cn.com/problems/biao-shi-shu-zhi-de-zi-fu-chuan-lcof/&#34;&gt;&lt;em&gt;&lt;strong&gt;剑指 Offer 20. 表示数值的字符串&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;ul class=&#34;contains-task-list&#34;&gt;
&lt;li class=&#34;task-list-item&#34;&gt;
&lt;p&gt;&lt;input class=&#34;task-list-item-checkbox&#34; checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-657760&#34;&gt;&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-657760&#34;&gt; 编写DFA的规范是什么，DFA的函数应该返回一个什么值？&lt;/label&gt;&lt;/p&gt;
&lt;p&gt;这个概念本身是不太规范的。DFA是一个广泛使用的概念，而在编译当中，应该说是语法分析更为恰当。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;If the next input character is not one that can begin a comparison operator, then a function &lt;code&gt;fail()&lt;/code&gt; is called. What &lt;code&gt;fail()&lt;/code&gt; does depends on the global error-recovery strategy of the lexical analyzer.&lt;/p&gt;
&lt;p&gt;——龙书&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;🤔 有没有优雅一点的方法做越界判断&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    int cur;
    int n;
    char[] s;
    boolean isd(char c){
        return (c&amp;lt;=&#39;9&#39; &amp;amp;&amp;amp; c&amp;gt;=&#39;0&#39;);
    }
    boolean readUnsigned(){
        boolean r = false;
        while(cur &amp;lt; n &amp;amp;&amp;amp; isd(s[cur])){
            r= true;
            cur++;
        }
        return r;
    }
    boolean readInt(){
        boolean r = false;
        if(cur &amp;lt; n &amp;amp;&amp;amp; (s[cur] == &#39;+&#39; || s[cur] == &#39;-&#39;))cur++;
        return readUnsigned();
    }
    public boolean isNumber(String _s) {
        s  = _s.toLowerCase().trim().toCharArray();
        n = s.length;
        boolean r = false;
        r = readInt();
        if(cur&amp;lt;n &amp;amp;&amp;amp; s[cur] == &#39;.&#39;){
            cur ++; // 注意单独取一个字符需要主动预读
            // 小数
            r |= readUnsigned();
            System.out.println(r);
            System.out.println(cur);
        }
        if(cur&amp;lt; n &amp;amp;&amp;amp; s[cur] == &#39;e&#39;){
            // 与的原因是，指数必须要有合法底数才行
            cur ++;
            // 这里的指数只能是整形
            r &amp;amp;= readInt();
        }
        return r &amp;amp;&amp;amp; cur == n;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;star剑指-offer-22-链表中倒数第k个节点&#34;&gt;⭐️&lt;a href=&#34;https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/&#34;&gt;剑指 Offer 22. 链表中倒数第k个节点&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;这里的鲁棒性判断非常重要！&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-Cpp&#34;&gt;Node* getkthFromEnd(Node * head, unsigned int k)
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;head = null&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;k &amp;lt;= 0&lt;/code&gt; 或者 &lt;code&gt;len &amp;lt; k&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;在代码当中会有 &lt;code&gt;k–&lt;/code&gt;，如果 k = 0(&lt;code&gt;uint32_t&lt;/code&gt;)，那么k 会变成一个 &lt;code&gt;2^32-1 = 0xFFFFFFFF&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;剑指-offer-23-寻找链表中的环&#34;&gt;剑指 Offer 23. 寻找链表中的环&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;修改列表本身的结构&lt;/strong&gt;&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;7&#34;&gt;&lt;img src=&#34;https://pic.leetcode-cn.com/a78f2cf1ee52b21e5331a313ea2a0464f5a67f66c8002ad1d2f555f3dfbe1fbd-%E7%BB%98%E5%9B%BE1.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;快慢指针&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;Node fast = head;
Node slow = head;
do{
    if(fast == null || fast.next == null)return null;
    slow = slow.next;
    fast = fast.next.next;
}while(fast != slow);
// 找到入口节点
Node cur = head;
while(cur != slow)cur = cur.next,slow = slow.next;
return slow;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-24-反转链表&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/&#34;&gt;剑指 Offer 24. 反转链表&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;head.next.next = head;&lt;/code&gt;这个表达很巧妙&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;public ListNode reverseList(ListNode head) {
    if(head == null || head.next == null)return head;
    ListNode tail = reverseList(head.next);
    head.next.next = head;
    head.next = null;
    return tail;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-26-树的子结构&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/&#34;&gt;剑指 Offer 26. 树的子结构&lt;/a&gt;&lt;/h2&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;8&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200813210109.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;pre&gt;&lt;code class=&#34;language-Java&#34;&gt;public boolean isSubStructure(TreeNode A, TreeNode B) {
    if(A == null &amp;amp;&amp;amp; B == null)return true;
    else if(A == null &amp;amp;&amp;amp; B!=null || A!=null &amp;amp;&amp;amp; B ==null)return false;
    if(A.val == B.val){
        return isSubStructure(A.left,B.left) &amp;amp;&amp;amp; isSubStructure(A.right,B.right) || isSubStructure(A.left,B) || isSubStructure(A.right,B);
    }else{
        return isSubStructure(A.left,B) || isSubStructure(A.right,B);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    public boolean isSubStructure(TreeNode A, TreeNode B, boolean fixed) {
        if(B == null)return true;
        else if(A == null &amp;amp;&amp;amp; B!=null)return false;
        if(A.val == B.val){
            if(fixed) return isSubStructure(A.left,B.left,true) &amp;amp;&amp;amp; isSubStructure(A.right,B.right,true);
            else return isSubStructure(A.left,B.left,true) &amp;amp;&amp;amp; isSubStructure(A.right,B.right,true) || isSubStructure(A.left,B,false) || isSubStructure(A.right,B,false);
        }else{
            if(fixed)return false;
            return isSubStructure(A.left,B,false) || isSubStructure(A.right,B,false);
        }
    }
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        if(A!=null &amp;amp;&amp;amp; B == null)return false;
        return isSubStructure(A, B,false);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;输入：&lt;/p&gt;
&lt;p&gt;[-1,3,2,0] []&lt;/p&gt;
&lt;p&gt;输出：&lt;/p&gt;
&lt;p&gt;true&lt;/p&gt;
&lt;p&gt;预期结果：&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;看看人家这美丽的代码 🌹&lt;/p&gt;
&lt;h3 id=&#34;注意这种多函数递归的情况&#34;&gt;注意这种多函数递归的情况&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        if (A == null || B == null) return false;
        return judge(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
    }

    private boolean judge(TreeNode A, TreeNode B) {
        return (A == null || B == null) ? (B == null) : (A.val == B.val) &amp;amp;&amp;amp; judge(A.left, B.left) &amp;amp;&amp;amp; judge(A.right, B.right);
    }
}

作者：ggeorge500
链接：https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/solution/java-san-xing-luo-ji-dai-ma-dfs-shuang-bai-tong-gu/
来源：力扣（LeetCode）
著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-2728-镜像对称的二叉树&#34;&gt;剑指 Offer 27,28. 镜像，对称的二叉树&lt;/h2&gt;
&lt;p&gt;两种递归策略&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自身递归 &lt;code&gt;isSymmetric(root)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;调用子函数 &lt;code&gt;mir(root,root)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;剑指-offer-29-顺时针打印矩阵&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof/&#34;&gt;剑指 Offer 29. 顺时针打印矩阵&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;剑指-offer-30-包含min函数的栈&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/&#34;&gt;剑指 Offer 30. 包含min函数的栈&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;输入：&lt;/p&gt;
&lt;p&gt;[&amp;quot;MinStack&amp;quot;,&amp;quot;push&amp;quot;,&amp;quot;push&amp;quot;,&amp;quot;push&amp;quot;,&amp;quot;top&amp;quot;,&amp;quot;pop&amp;quot;,&amp;quot;getMin&amp;quot;,&amp;quot;pop&amp;quot;,&amp;quot;getMin&amp;quot;,&amp;quot;pop&amp;quot;,&amp;quot;push&amp;quot;,&amp;quot;top&amp;quot;,&amp;quot;getMin&amp;quot;,&amp;quot;push&amp;quot;,&amp;quot;top&amp;quot;,&amp;quot;getMin&amp;quot;,&amp;quot;pop&amp;quot;,&amp;quot;getMin&amp;quot;] [[],[2147483646],[2147483646],[2147483647],[],[],[],[],[],[],[2147483647],[],[],[-2147483648],[],[],[],[]]&lt;/p&gt;
&lt;p&gt;输出：&lt;/p&gt;
&lt;p&gt;[null,null,null,null,2147483647,null,1061109567,null,1061109567,null,null,2147483647,1061109567,null,-2147483648,-2147483648,null,1061109567]&lt;/p&gt;
&lt;p&gt;预期结果：&lt;/p&gt;
&lt;p&gt;[null,null,null,null,2147483647,null,2147483646,null,2147483646,null,null,2147483647,21]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;heavy_check_mark不要想当然&#34;&gt;✔️不要想当然！&lt;/h3&gt;
&lt;p&gt;直接设置一个成员变量貌似可行，但实际这个变量只能记录，但无法处理&lt;code&gt;pop()&lt;/code&gt;带来的动态更新&lt;/p&gt;
&lt;p&gt;直接的想法是：想象一个动态的场景，如果弹出一个元素，我需要立即更新全局最小值，如果全局最小值是自己，那么我需要立即找到次小值，如果不是，那么可以安全弹出。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class MinStack {
    int INF = 0x7FFFFFFF;
    ArrayList&amp;lt;Integer&amp;gt; a;
    ArrayList&amp;lt;Integer&amp;gt; min;
    ArrayList&amp;lt;Integer&amp;gt; secmin;
    int cur = -1;
    /** initialize your data structure here. */
    public MinStack() {
        a = new ArrayList&amp;lt;Integer&amp;gt;();
        min = new ArrayList&amp;lt;Integer&amp;gt;();
        secmin = new ArrayList&amp;lt;Integer&amp;gt;();
        a.add(INF);
        cur ++;
        secmin.add(cur);
        min.add(cur);
    }
    
    public void push(int x) {
        int i_min = min.get(cur);
        int i_secmin = secmin.get(cur);
        int _min = a.get(i_min);
        int _secmin = a.get(i_secmin);
        cur ++;
        if(x&amp;lt;=_min){
            min.add(cur);
            secmin.add(i_min);
        }else if(_min &amp;lt; x &amp;amp;&amp;amp; x&amp;lt;= _secmin){
            min.add(i_min);
            secmin.add(cur);
        }else{
            min.add(i_min);
            secmin.add(i_secmin);
        }
        a.add(x);
    }
    
    public void pop() {
        if(cur &amp;lt;0)return;
        a.remove(cur);
        min.remove(cur);
        secmin.remove(cur);
        cur --;
    }
    
    public int top() {
        return a.get(cur);
    }
    
    public int getMin() {
        int ii = min.get(cur);
        return a.get(ii);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;😂但其实根本不用这么麻烦hhh&lt;/strong&gt;&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;9&#34;&gt;&lt;img src=&#34;https://assets.leetcode-cn.com/solution-static/155/155_fig1.gif&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h1 id=&#34;day4&#34;&gt;day4&lt;/h1&gt;
&lt;h2 id=&#34;剑指-offer-31-栈的压入-弹出序列&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/&#34;&gt;剑指 Offer 31. 栈的压入、弹出序列&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;栈混洗&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;剑指-offer-32-从上到下打印二叉树&#34;&gt;剑指 Offer 32 从上到下打印二叉树&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;直接层序遍历&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;分层层序遍历&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;可以用递归实现&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; ans;
public List&amp;lt;List&amp;lt;Integer&amp;gt;&amp;gt; levelOrder(TreeNode root) {
    ans = new ArrayList&amp;lt;&amp;gt;();
    lev(1,root);
    return ans;
}
void lev(int level,TreeNode root){
    if(root == null)return;
    if(ans.size() &amp;lt; level)ans.add(new ArrayList&amp;lt;Integer&amp;gt;());
    ans.get(level -1).add(root.val);
    lev(level+1,root.left);
    lev(level+1,root.right);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;分层&lt;strong&gt;倒序&lt;/strong&gt;层序遍历&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;剑指-offer-35-复杂链表的复制&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/&#34;&gt;剑指 Offer 35. 复杂链表的复制&lt;/a&gt;&lt;/h2&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;10&#34;&gt;&lt;img src=&#34;https://img-blog.csdnimg.cn/20190523210140203.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2J1ZmVuZ3pq,size_16,color_FFFFFF,t_70&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;11&#34;&gt;&lt;img src=&#34;https://img-blog.csdnimg.cn/20190523210602950.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2J1ZmVuZ3pq,size_16,color_FFFFFF,t_70&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    void dup(Node head){
        Node cur = head;
        Node temp = cur;
        while(cur!=null){
            temp = cur.next;
            cur.next = new Node(0);
            cur.next.val = cur.val;
            cur.next.next = temp;
            cur = temp;
        }
    }
    void connect(Node head){
        Node oldnode = head;
        Node newnode = head;
        while(oldnode!=null){
            newnode = oldnode.next;
            newnode.random = oldnode.random == null ? null:oldnode.random.next;
            oldnode = newnode.next;
        }
    }
    Node split(Node oldhead){
        Node newhead = oldhead.next;
        Node oldnode = oldhead;
        Node newnode = oldhead.next;
        while(oldnode!=null){
            newnode = oldnode.next;
            oldnode.next = newnode.next;
            newnode.next = newnode.next == null? null:newnode.next.next;
            oldnode = oldnode.next;
        }
        return newhead;
    }
    public Node copyRandomList(Node head) {
        if(head == null)return null;
        dup(head);
        connect(head);
        return split(head);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-36-二叉搜索树与双向链表&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/&#34;&gt;剑指 Offer 36. 二叉搜索树与双向链表&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    public Node treeToDoublyList(Node root) {
        Node[] ret = getBid(root);
        Node ans = ret[0];
        if(ret[0]!=null){
            ret[0].left = ret[1];
            ret[1].right = ret[0];
        }
        return ans;
    }
    Node[] getBid(Node root){
        if(root == null) return new Node[]{null,null};
        Node[] ret = new Node[2];
        Node[] l = getBid(root.left);
        Node[] r = getBid(root.right);
        Node l1 = l[0];
        Node l2 = l[1];
        Node r1 = r[0];
        Node r2 = r[1];
        if(l2 == null){
            root.left = null;
            // 处理返回值
            l1 = root;
        }else{
            root.left = l2;
            l2.right = root;
        }
        if(r1 == null){
            root.right = null;
            r2 = root;
        }else{
            root.right = r1;
            r1.left = root;
        }
        ret[0] = l1;
        ret[1] = r2;
        return ret;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;题解的方法更好！不需要显式的返回&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    Node head,tail;
    public Solution(){
        head = null;
        tail = null;
    }
    public Node treeToDoublyList(Node root) {
        if(root == null)return null;
        dfs(root);
        head.left = tail;
        tail.right = head;
        return head;
    }
    void dfs(Node root){
        // head ...tail root...
        if(root == null)return;
        dfs(root.left);
        if(head == null)head = root;// 只修改一次
        else tail.right = root;
        root.left = tail;
        tail = root;
        dfs(root.right);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-37-序列化二叉树&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/&#34;&gt;剑指 Offer 37. 序列化二叉树&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;star剑指-offer-38-字符串的排列全排列的高效去重方法&#34;&gt;⭐️&lt;a href=&#34;https://leetcode-cn.com/problems/zi-fu-chuan-de-pai-lie-lcof/&#34;&gt;剑指 Offer 38. 字符串的排列【全排列的高效去重方法】&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    List&amp;lt;String&amp;gt; ans;
    int n;
    char c[];
    public String[] permutation(String s) {
        ans = new ArrayList&amp;lt;String&amp;gt;();
        c = s.toCharArray();
        n = c.length;
        dfs(0);
        return ans.toArray(new String[0]);
    }
    void dfs(int l){
        if(l == n){
            ans.add(String.valueOf(c));
        }
        HashSet&amp;lt;Character&amp;gt; nextc = new HashSet&amp;lt;Character&amp;gt;();
        for(int i = l;i&amp;lt;n;i++){
            // 对c当中的下一个字符
            if(nextc.contains(c[i]))continue;
            else nextc.add(c[i]);
            // 如果没有出现过，那么选择为当前的元素
            swap(l,i);
            dfs(l+1);
            swap(l,i);
        }
    }
    void swap(int i,int j){
        char temp = c[i];
        c[i] = c[j];
        c[j] = temp;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;seedling31-下一个排列&#34;&gt;🌱&lt;a href=&#34;https://leetcode-cn.com/problems/next-permutation/&#34;&gt;31. 下一个排列&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/Dream_Weave/article/details/80692126&#34;&gt;ACM模板——排列 - 不重复全排列（DFS + 计数 + 附加规则）&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;day5&#34;&gt;day5&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;休息一下~&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;day6&#34;&gt;day6&lt;/h1&gt;
&lt;h2 id=&#34;剑指-offer-39-数组中出现次数超过一半的数字&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/&#34;&gt;剑指 Offer 39. 数组中出现次数超过一半的数字&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;剑指-offer-41-数据流中的中位数&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/&#34;&gt;剑指 Offer 41. 数据流中的中位数&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;h3 id=&#34;基础方法二分查找vector&#34;&gt;基础方法：二分查找+Vector&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;复杂度分析 &lt;code&gt;O(logn + n) = O(n);&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;基础方法kthmin&#34;&gt;基础方法：kthmin&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;复杂度 &lt;code&gt;O(n)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;排序的时间复杂度为-on-logn但事实上我们对除了中位数以外的其它位置的元素并不关心&#34;&gt;排序的时间复杂度为 &lt;code&gt;O(N logN)&lt;/code&gt;，但事实上，我们对除了中位数以外的其它位置的元素并不关心&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;优先级队列&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;h3 id=&#34;avl树借鉴二分查找的优点并且防止退化&#34;&gt;AVL树——借鉴二分查找的优点，并且防止退化&lt;/h3&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul class=&#34;contains-task-list&#34;&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input class=&#34;task-list-item-checkbox&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-9828452&#34;&gt;&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-9828452&#34;&gt; ### :seedling:AVL&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;剑指-offer-42-连续子数组的最大和&#34;&gt;剑指 Offer 42. 连续子数组的最大和&lt;/h2&gt;
&lt;h1 id=&#34;day7&#34;&gt;day7&lt;/h1&gt;
&lt;h2 id=&#34;剑指-offer-43-1~n整数中1出现的次数&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/&#34;&gt;剑指 Offer 43. 1～n整数中1出现的次数&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;写了一下午的代码……&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    long[] bases;
    long[] base10;
    int i;
    void show(){
        for(int j = 0;j&amp;lt;=i;j++){
            System.out.println(&amp;quot;base10[&amp;quot;+j+&amp;quot;] = &amp;quot;+base10[j]+&amp;quot;; base[&amp;quot;+j+&amp;quot;] = &amp;quot; + bases[j]);
        }
    }
    int findbase(int n){
        int l = 0,r = i;
        // 找到大于等于n的第一个区间
        while(l&amp;lt;r){
            int mid = (l+r)/2;
            if(bases[mid] &amp;lt; n)l = mid +1;
            else r = mid;// r = mid - 1; 必须配合 mid = (l+r+1)/2;
        }
        return l;
    }
    int getkth(int n,int base,int pos){
        int cur = -1;
        pos = base - pos;
        while(pos &amp;gt; 0){
            cur = n%10;
            n /= 10;
            pos --;
        }
        return cur;
    }
    public int findNthDigit(int n) {
        if(n==0)return 0;
        bases = new long[20];
        base10 = new long[20];
        bases[0] = 0;
        base10[0] = 1;
        i = 1;
        while(true){
            base10[i] = base10[i-1] * 10;
            bases[i] = bases[i-1] + i * (base10[i] - base10[i-1]);
            if(bases[i] &amp;gt; Integer.MAX_VALUE){
                bases[i] = Integer.MAX_VALUE;
                break;
            }
            i++;
        }
        show();
        int base = findbase(n);
        int off = (int)(n - bases[base-1] - 1);
        int rank = off/base;
        int trueval = (int)base10[base -1] + rank;
        System.out.println(&amp;quot;base = &amp;quot;+base+&amp;quot; off = &amp;quot;+off+&amp;quot; rank = &amp;quot;+rank+&amp;quot; val = &amp;quot;+trueval+&amp;quot; k = &amp;quot;+(off % base));
        return getkth(trueval,base,off % base);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    public int findNthDigit(int n) {
        int base = 1;
        long start = 1;
        long tot = 9;
        while(n&amp;gt;tot){
            n -= tot;
            base ++;
            start *= 10;
            tot = 9*start*base;
        }
        long num = start + (n-1)/base;
        // 获取数位的简单方法：字符串处理
        return Long.toString(num).charAt((n-1) % base) - &#39;0&#39;;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-45-把数组排成最小的数&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/&#34;&gt;剑指 Offer 45. 把数组排成最小的数&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;Arrays.sort(ss,(x,y)-&amp;gt;(x+y).compareTo(y+x));
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;star剑指-offer-46-把数字翻译成字符串动态规划的优化&#34;&gt;⭐️&lt;a href=&#34;https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/&#34;&gt;剑指 Offer 46. 把数字翻译成字符串【动态规划的优化】&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;动态规划的应用：多种可能性的转移 &amp;amp; 相互影响&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;不要着急一步到位，先做好分析&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;1 2 3 5 1 2 3 &lt;strong&gt;1&lt;/strong&gt; 1&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;i&lt;/strong&gt;     i+1&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;dp[i] = dp[i-1] or dp[i-1] + dp[i-2];&lt;/p&gt;
&lt;p&gt;令 &lt;code&gt;x = dp[i-1]; y = dp[i-2];&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;public int translateNum(int num) {
    int x = num/10,y,a = 1,b = 1,c = -3,temp;
    while(num&amp;gt;=10){
        y = num %10;
        num/=10;
        x = num % 10;
        temp = x * 10 +y;
        if(10&amp;lt;=temp &amp;amp;&amp;amp; temp &amp;lt;= 25){
            c = a+b;
        } else {
            c = a;
        }
        b = a;
        a = c;
    }
    return a;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-47-礼物的最大价值&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/li-wu-de-zui-da-jie-zhi-lcof/&#34;&gt;剑指 Offer 47. 礼物的最大价值&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;剑指-offer-48-最长不含重复字符的子字符串&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/&#34;&gt;剑指 Offer 48. 最长不含重复字符的子字符串&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/solution/mian-shi-ti-48-zui-chang-bu-han-zhong-fu-zi-fu-d-9/&#34;&gt;超棒的题解&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;key利用动态规划扩展区间&#34;&gt;🔑利用动态规划扩展区间&lt;/h3&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;dp[i] = dp[i-1] +1 \\
dp[i] = i - map[j]
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;−&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.64444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.74285em;vertical-align:-0.08333em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;−&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.05724em;&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;这种思想很类似于……&lt;/p&gt;
&lt;p&gt;😂一时间竟想不到很好的例子&lt;/p&gt;
&lt;h2 id=&#34;star剑指-offer-49-丑数巧妙的递推方法&#34;&gt;⭐️&lt;a href=&#34;https://leetcode-cn.com/problems/chou-shu-lcof/&#34;&gt;剑指 Offer 49. 丑数【巧妙的递推方法】&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;只包含指定的&lt;strong&gt;质因子&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;首先想到了筛法，其实也是动态规划的一种体现&lt;/p&gt;
&lt;p&gt;特判： &lt;code&gt;i = 1&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;有一个问题：这个数可能很大，怎么有效控制空间？&lt;/p&gt;
&lt;p&gt;&lt;em&gt;可以考虑只存储有效数据，而不存储所有数据&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;更高效的思路是递推，而我做的其实还是记忆化搜索，空间浪费很大&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;每一个丑数都可以由之前的某个丑数生成（不一定唯一，比如 6 = 2*3 = 3*2)&lt;/p&gt;
&lt;p&gt;其实应该用一个set维护所有的丑数集合&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;[1]&lt;/li&gt;
&lt;li&gt;[&lt;strong&gt;&lt;code&gt;1&lt;/code&gt;&lt;/strong&gt;] + [2,3,5]&lt;/li&gt;
&lt;li&gt;[1,&lt;strong&gt;&lt;code&gt;2&lt;/code&gt;&lt;/strong&gt;,3,5] + [4,6,10] 2乘以所有的因子&lt;/li&gt;
&lt;li&gt;[1,2,&lt;strong&gt;&lt;code&gt;3&lt;/code&gt;&lt;/strong&gt;,4,5,6,10] + [6,9,15] 3乘以所有的因子&lt;/li&gt;
&lt;li&gt;……&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;每一个丑数都必须由之前的一个丑数生成&lt;/p&gt;
&lt;p&gt;&lt;u&gt;***如何依次产生每个丑数呢？***&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;借鉴&lt;strong&gt;归并排序&lt;/strong&gt;的思路&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;取最小值
&lt;ol&gt;
&lt;li&gt;p2,p3,p5分别对应 a2,a3,a5&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nums[i++] = min(a2,a3,a5);&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;移动指针
&lt;ol&gt;
&lt;li&gt;比如这个丑数是 &lt;code&gt;a2 = p2*2;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;p2++&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;那么下一次 &lt;code&gt;min(a2,a3,a5);&lt;/code&gt;肯定会把a3,a5当中的某个选出来，所以不会遗漏&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;joy313-超级丑数&#34;&gt;😂&lt;a href=&#34;https://leetcode-cn.com/problems/super-ugly-number/&#34;&gt;313. 超级丑数&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    int INF = 0x7fffffff;
    public int nthSuperUglyNumber(int n, int[] primes) {
        int k = primes.length;
        int[] pts = new int[k];
        int[] nums = new int[n];
        for(int i = 1;i&amp;lt;n;i++)nums[i] = INF;
        nums[0] = 1;
        for(int i = 1;i&amp;lt;n;i++){
            for(int j = 0;j&amp;lt;k;j++){
                nums[i] = Math.min(nums[i],nums[pts[j]]*primes[j]);
            }
            for(int j = 0;j&amp;lt;k;j++){
                if(nums[i] == nums[pts[j]]*primes[j]){
                    pts[j]++;
                }
            }
        }
        return nums[n-1];
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;剑指-offer-50-第一个只出现一次的字符&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/&#34;&gt;剑指 Offer 50. 第一个只出现一次的字符&lt;/a&gt;&lt;/h2&gt;
&lt;h1 id=&#34;day8&#34;&gt;day8&lt;/h1&gt;
&lt;h2 id=&#34;剑指-offer-54-二叉搜索树的第k大节点&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/&#34;&gt;剑指 Offer 54. 二叉搜索树的第k大节点&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;剑指-offer-55-ii-平衡二叉树&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/ping-heng-er-cha-shu-lcof/&#34;&gt;剑指 Offer 55 - II. 平衡二叉树&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;如下代码是错误的&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;public boolean isBalanced(TreeNode root) {
    if(root == null)return true;
    else return Math.abs(d(root.left) - d(root.right))&amp;lt;=1;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;反例&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;12&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200818153916.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;public boolean isBalanced(TreeNode root) {
    if(root == null)return true;
    else return isBalanced(root.left) &amp;amp;&amp;amp; isBalanced(root.right) &amp;amp;&amp;amp; Math.abs(d(root.left) - d(root.right))&amp;lt;=1;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这种方法的复杂度是 &lt;code&gt;O(NlogN)&lt;/code&gt;（重复计算深度）&lt;/p&gt;
&lt;h3 id=&#34;star短路先序遍历&#34;&gt;⭐️短路先序遍历&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;dfs()&lt;/code&gt;的原生复杂度是&lt;code&gt;O(N)&lt;/code&gt;，因此并不用担心。很多情况下dfs效率低下是因为重复访问某个节点&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;ms&lt;/code&gt;记忆化&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vis&lt;/code&gt;标记&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;短路&lt;/strong&gt;：返回查询值（一般和深度相关，本题就是深度），或者 &lt;code&gt;BREAK_FLAG&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;都是不错的解决方法&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;13&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200818160416.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    int INF = 0x3f3f3f3f,ERR = -INF;
    int h(TreeNode root){
        if(root == null)return 0;
        int l = h(root.left);
        if(l == ERR)return ERR;
        int r = h(root.right);
        if(r == ERR)return ERR;
        return Math.abs(l-r)&amp;lt;=1 ? Math.max(l,r) + 1:ERR;
    }
    public boolean isBalanced(TreeNode root) {
        return h(root) == ERR? false:true;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;star剑指-offer-51-数组中的逆序对&#34;&gt;⭐️&lt;a href=&#34;https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/&#34;&gt;剑指 Offer 51. 数组中的逆序对&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;key归并排序模板&#34;&gt;🔑归并排序模板&lt;/h3&gt;
&lt;h2 id=&#34;剑指-offer-56-i-数组中数字出现的次数&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/&#34;&gt;剑指 Offer 56 - I. 数组中数字出现的次数&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;剑指-offer-56-ii-数组中数字出现的次数-ii&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/&#34;&gt;剑指 Offer 56 - II. 数组中数字出现的次数 II&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;star剑指-offer-57-ii-和为s的连续正数序列&#34;&gt;⭐️&lt;a href=&#34;https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/&#34;&gt;剑指 Offer 57 - II. 和为s的连续正数序列&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;尺取&#34;&gt;尺取&lt;/h3&gt;
&lt;h2 id=&#34;剑指-offer-58-ii-左旋转字符串&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/&#34;&gt;剑指 Offer 58 - II. 左旋转字符串&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;😂&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;(s+s).substring(k,k+s.size());
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;day9-10&#34;&gt;day9 &amp;amp; 10&lt;/h1&gt;
&lt;h2 id=&#34;剑指-offer-59-ii-队列的最大值&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/&#34;&gt;剑指 Offer 59 - II. 队列的最大值&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;key尺取区间最大值单调队列&#34;&gt;🔑尺取区间最大值——单调队列&lt;/h3&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;14&#34;&gt;&lt;img src=&#34;https://pic.leetcode-cn.com/a151d4156944cef8165b17daca7a3131bcfc55c8a1be09cefa4cd6cdd8c03909-%E6%BC%94%E7%A4%BA%E6%96%87%E7%A8%BF1.gif&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class MaxQueue {
    Queue&amp;lt;Integer&amp;gt; q;
    Deque&amp;lt;Integer&amp;gt; qmax;
    public MaxQueue() {
        q = new LinkedList&amp;lt;Integer&amp;gt;();
        qmax = new LinkedList&amp;lt;Integer&amp;gt;();
    }
    
    public int max_value() {
        if(!q.isEmpty())return qmax.peekFirst();
        else return -1;
    }
    
    public void push_back(int value) {
        q.offer(value);
        while(!qmax.isEmpty() &amp;amp;&amp;amp; qmax.peekLast() &amp;lt;= value){
            qmax.pollLast();
        }
        qmax.offerLast(value);
    }
    
    public int pop_front() {
        if(q.isEmpty()){
            return -1;
        }else{
            int front = q.poll();
            if(front == qmax.peekFirst()){
                qmax.pollFirst();
            }
            return front;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;💡这种题目，应该最先考虑&lt;strong&gt;同构的数据结构&lt;/strong&gt;，这样可以基本保持动态操作的相对一致性&lt;/p&gt;
&lt;p&gt;比如这里的&lt;strong&gt;单调队列&lt;/strong&gt;，以及&lt;a href=&#34;https://leetcode-cn.com/problems/bao-han-minhan-shu-de-zhan-lcof/&#34;&gt;&lt;strong&gt;单调栈&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;单调队列利用到的性质是最大值的&lt;strong&gt;排他性&lt;/strong&gt;，即后面的最大值会&lt;em&gt;打败&lt;/em&gt;所有之前不如它的值&lt;/p&gt;
&lt;h2 id=&#34;剑指-offer-60-n个骰子的点数&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/&#34;&gt;剑指 Offer 60. n个骰子的点数&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;最先想到的还是记忆化搜索&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    int[][] poss;
    int ms(int n,int tar){
        if(n&amp;lt;0 || tar &amp;gt;6 *n || tar &amp;lt;n)return -1;
        if(poss[n][tar]!=0)return poss[n][tar];
        
        for(int i = 1;i&amp;lt;=6;i++){
            int r = ms(n-1,tar-i);
            if(r!=-1){
                poss[n][tar] += r;
            }
        }
        return poss[n][tar];
    }
    public double[] twoSum(int n) {
        poss = new int[6*n +10][6*n + 10];
        for(int i = 1;i&amp;lt;=6;i++){
            poss[1][i] = 1;
        }
        double base = 1;
        for(int i = 0;i&amp;lt;n;i++){
            base *= 1/6.0;
        }

        double[] ans = new double[5*n+1];
        for(int i = n;i&amp;lt;=6*n;i++){
            ans[i-n] = ms(n,i) * base;
        }
        return ans;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;key滚动数组优化-dpn-fdpn-1-类型&#34;&gt;🔑滚动数组优化 / &lt;code&gt;dp[n] = f(dp[n-1])&lt;/code&gt; 类型&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/solution/nge-tou-zi-de-dian-shu-dong-tai-gui-hua-ji-qi-yo-3/&#34;&gt;力扣题解1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/nge-tou-zi-de-dian-shu-lcof/solution/java-dong-tai-gui-hua-by-zhi-xiong/&#34;&gt;力扣题解2&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&#34;language-java&#34;&gt;class Solution {
    public double[] twoSum(int n) {
        double[] dp = new double[6*n +10];
        for(int i = 1;i&amp;lt;=6;i++){
            dp[i] = 1/6.0;
        }
        // 1-n个骰子
        for(int i = 2;i&amp;lt;=n;i++){
            // 对于每一个可能出现的结果（从后向前，类比完全背包）
            for(int j = 6*i;j&amp;gt;=i;j--){
                // 初始化，因为i-1个骰子对应的dp值已经不会再使用了
                dp[j] = 0;
                // 假设第i个骰子投出的数字分别是1-6
                for(int k = 1;k&amp;lt;=6;k++){
                    int pre = j-k;
                    // 如果这个数字可以由i-1个骰子产生
                    if((i-1)&amp;lt;=pre &amp;amp;&amp;amp; pre&amp;lt;= 6*(i-1)){
                        // 累加结果
                        dp[j] += dp[pre]/6.0;
                    }
                }
            }
        }
        // 返回数组切片
        return Arrays.copyOfRange(dp,n,6*n+1);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;总结&#34;&gt;总结&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;若有恒，何必三更眠五更起&lt;/p&gt;
&lt;p&gt;最无益，莫过一日曝十日寒&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;还是用这句话激励自己吧！有时候自己也不喜欢看过题解或者找到一个朴素的实现就浅尝辄止，刷够题目本身不是算法的意义和乐趣，分析和解决问题才是🎉&lt;/p&gt;
&lt;p&gt;很多时候把什么事情看作任务，反而不太容易坚持，不如把思考算法问题也当作一个&lt;strong&gt;娱乐&lt;/strong&gt;的方式，快乐学习🕺&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Do it better with pleasure:happy:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;希望你每做一个题都有自己的&lt;strong&gt;思考&lt;/strong&gt;，都有&lt;strong&gt;收获&lt;/strong&gt;🏃&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://leetcode-cn.com/problemset/leetcode-top/&#34;&gt;LeetCode 精选 TOP 面试题 145&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul class=&#34;contains-task-list&#34;&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input class=&#34;task-list-item-checkbox&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-8583392&#34;&gt;&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-8583392&#34;&gt; 100 天后 2020年11月28日星期六 记得来打卡！&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我们都会有美好的未来！&lt;/p&gt;
">《剑指offer》 刷题记录</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/dsa-2020-81-810/"" data-c="
          &lt;h1 id=&#34;81&#34;&gt;8.1&lt;/h1&gt;
&lt;h2 id=&#34;pat-dfsdijkstra-重做&#34;&gt;&lt;a href=&#34;https://pintia.cn/problem-sets/994805342720868352/problems/994805489282433024&#34;&gt;PAT dfs+dijkstra 重做&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;// PAT 1018
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;vector&amp;gt; 
#include&amp;lt;map&amp;gt;
#include&amp;lt;algorithm&amp;gt;
using namespace std;
const int N = 600;
const int INF = 0x3f3f3f3f;
const int ddd = 0; 
//const int ddd = 1; 
int w[N][N];
int v[N];
int n,m,c,t;
vector&amp;lt;int &amp;gt;pre[N];
bool vis[N];
int dis[N];
vector&amp;lt;int &amp;gt; path;
vector&amp;lt;int &amp;gt; temppath;
int ans = INF; 
int minneed = INF;
int minhas = -INF;
void dij(){
	for(int i = 0;i&amp;lt;=n;i++){
		dis[i] = INF;
	} 
	dis[0] = 0;
	for(int i = 0;i&amp;lt;=n;i++){
		int k = -7;
		int _min = INF;
		for(int i = 0;i&amp;lt;=n;i++){
			if(!vis[i]&amp;amp;&amp;amp;dis[i]&amp;lt;_min){
				_min = dis[i];
				k = i;
			}
		}
		vis[k] = 1;
		for(int i = 0;i&amp;lt;=n;i++){
			if(dis[k]+w[k][i]==dis[i]){
				pre[i].push_back(k);
			}else if(dis[k]+w[k][i]&amp;lt;dis[i]){
				dis[i] = dis[k]+w[k][i];
				vector&amp;lt;int &amp;gt;().swap(pre[i]);
				pre[i].push_back(k);
			}
		}
	}
}
void dfs(int cur){
	if(ddd)printf(&amp;quot;%d\n&amp;quot;,cur);
	temppath.push_back(cur);
	if(cur == 0){
		int has = 0;
		int need = 0;
		for(int i = temppath.size()-1;i&amp;gt;=0;i--){
			// 遍历这条路径 
			int at = temppath[i];
			if(v[at]&amp;lt;0){
				if(has &amp;gt; -v[at]){
					// 注意是负数 
					has += v[at];
				}else{
					need += -v[at] - has;
					has = 0;
				} 
				if(need&amp;lt;minneed){
					minneed = minneed;
				}
			}else if(v[at] &amp;gt;=0){
				has += v[at];
			}
			if(ddd)printf(&amp;quot;\tv[at] = %d has = %d need = %d\n&amp;quot;,v[at],has,need);
		} 
		// 遍历路径结束
		if(need &amp;lt; minneed){
			path = temppath;
			minneed = need;
			minhas = has; 
		} else if(need == minneed &amp;amp;&amp;amp; has &amp;lt; minhas){
			// 第二标尺
			path = temppath;
			minhas = has;
		}
	}
	for(int i = 0;i&amp;lt;pre[cur].size();i++){
		dfs(pre[cur][i]);
	}
	temppath.pop_back();
}
int main(){
	scanf(&amp;quot;%d %d %d %d&amp;quot;,&amp;amp;c,&amp;amp;n,&amp;amp;t,&amp;amp;m);
	v[0] = 0;
	for(int i = 1;i&amp;lt;=n;i++){
		scanf(&amp;quot;%d&amp;quot;,&amp;amp;v[i]);
		v[i] = v[i] - c/2;
	}
	for(int i = 0;i&amp;lt;N;i++){
		for(int j = 0;j&amp;lt;N;j++){
//			w[i][j] = -3;
			w[i][j] = INF;
		}
	}
	for(int i = 0;i&amp;lt;m;i++){
		int u,v,ww;
		scanf(&amp;quot;%d %d %d&amp;quot;,&amp;amp;u,&amp;amp;v,&amp;amp;ww);
		w[u][v] = w[v][u] = ww;
	} 
	dij();
	dfs(t);
	// 输出
	printf(&amp;quot;%d &amp;quot;,minneed);
	for(int i = path.size()-1;i&amp;gt;=1;i--){
		printf(&amp;quot;%d-&amp;gt;&amp;quot;,path[i]);
	} 
	printf(&amp;quot;%d &amp;quot;,path[0]);
	printf(&amp;quot;%d&amp;quot;,minhas);
	return 0;
} 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;检查出的错误&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;need += -v[at] - has;&lt;/code&gt; 之前写成了 &lt;code&gt;need = -v[at] - has;&lt;/code&gt; 忘记累加了&lt;/li&gt;
&lt;li&gt;&lt;code&gt;for(int i = path.size()-1;i&amp;gt;=1;i++)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;命名不规范，身体的时候就要看好是&lt;code&gt;max&lt;/code&gt; 还是 &lt;code&gt;min&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;82&#34;&gt;8.2&lt;/h1&gt;
&lt;h2 id=&#34;正则表达式匹配&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/regular-expression-matching/&#34;&gt;正则表达式匹配&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;class Solution {
public:
    string _s;
    string _p;
    bool match(int ii ,int jj){
        // printf(&amp;quot;%s\n%s\n&amp;quot;,_s.c_str(),_p.c_str());
        return (_p[jj] == &#39;.&#39; || _s[ii] == _p[jj]) &amp;amp;&amp;amp; ii!=0;
    }
    bool isMatch(string s, string p) {
        int lens = s.size();
        int lenp = p.size();
        s.insert(0,&amp;quot;#&amp;quot;);
        p.insert(0,&amp;quot;#&amp;quot;);
        _s = s;
        _p = p;
        vector&amp;lt;vector&amp;lt;int &amp;gt; &amp;gt; dp(lens+10,vector&amp;lt;int &amp;gt;(lenp+10,false));
        dp[0][0] = true;
        // 注意这里的循环
        for(int i = 0;i&amp;lt;=lens;i++){
            for(int j = 0;j&amp;lt;=lenp;j++){
                // 不要害怕越界
                if(i == 0&amp;amp;&amp;amp; j == 0)continue;
                // 应该把匹配写成一个函数，避免越界问题
                // if(s[i] == p[j] || p[j] == &#39;.&#39;){
                if(match(i,j)){
                    if(i&amp;gt;=1 &amp;amp;&amp;amp; j&amp;gt;=1)dp[i][j] = dp[i-1][j-1];
                }
                else{
                    // 特判
                    if(p[j] == &#39;*&#39;){
                        // if(j&amp;gt;0 &amp;amp;&amp;amp; (s[i] == p[j-1] || p[j-1] == &#39;.&#39;)){
                        if(j&amp;gt;0 &amp;amp;&amp;amp; match(i,j-1)){
                            // 匹配或者不匹配都行
                            // 重点理解
                            if(i&amp;gt;=1)dp[i][j] = dp[i-1][j];
                            if(j&amp;gt;=2)dp[i][j] |= dp[i][j-2];
                        }else{
                            if(j&amp;gt;=2)dp[i][j] = dp[i][j-2];
                        }
                    }else{
                        dp[i][j] = false;
                    }
                }
            }
        }
        return dp[lens][lenp];
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;ul class=&#34;contains-task-list&#34;&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input class=&#34;task-list-item-checkbox&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-3127296&#34;&gt;&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-3127296&#34;&gt; 正则表达式处理当中都用到了那些技术？&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;83&#34;&gt;8.3&lt;/h1&gt;
&lt;h2 id=&#34;编辑距离&#34;&gt;&lt;a href=&#34;https://vjudge.net/problem/HRBUST-1284&#34;&gt;编辑距离&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;一遍过😆&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;// 编辑距离
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;string.h&amp;gt;
#include&amp;lt;algorithm&amp;gt;
using namespace std;
const int N = 1000 +100;
int dp[N][N];
int n;
char s1[N];
char s2[N];
int n1,n2;
void show(){
	for(int i = 0;i&amp;lt;=n1;i++){
		for(int j = 0;j&amp;lt;=n2;j++){
			printf(&amp;quot;%3d&amp;quot;,dp[i][j]);
		}
		printf(&amp;quot;\n&amp;quot;);
	}
}
int main(){
	int nn;
	scanf(&amp;quot;%d&amp;quot;,&amp;amp;nn);
	while(nn--){
s1[0] = s2[0] = &#39;#&#39;;
		scanf(&amp;quot;%s&amp;quot;,s1+1);
		scanf(&amp;quot;%s&amp;quot;,s2+1);
		//
		n1 = strlen(s1+1);
		n2 = strlen(s2+1);
		for(int i = 0;i&amp;lt;=n1;i++){
			dp[i][0] = i;
		}
		for(int j = 0;j&amp;lt;=n2;j++){
			dp[0][j] = j;
		}
		// 
		for(int i = 1;i&amp;lt;=n1;i++){
			for(int j = 1;j&amp;lt;=n2;j++){
				if(s1[i] == s2[j]){
					// 相等
					dp[i][j] = dp[i-1][j-1];
				}else{
					dp[i][j] = min(dp[i-1][j-1]+1,min(dp[i][j-1]+1,dp[i-1][j]+1));
				}
			}
		}
	//	show();
		printf(&amp;quot;%d\n&amp;quot;,dp[n1][n2]); 
	}
	return 0;
} 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;取得突破的关键点是打印出来了&lt;code&gt;dp&lt;/code&gt;矩阵&lt;/p&gt;
&lt;p&gt;&lt;code&gt;kitten-&amp;gt;sitting&lt;/code&gt;的样例当中发现 &lt;code&gt;dp[6][6]=2&lt;/code&gt;但是&lt;code&gt;dp[6][7] = 7&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;字符相等时，这个位置自然不必做多余的交换，因此有 &lt;code&gt;dp[i][j] = dp[i-1][j-1]&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;而不相等时，就会出现多种选择&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;abc&lt;/code&gt;-&amp;gt;&lt;code&gt;abe&lt;/code&gt; 对应 &lt;code&gt;dp[i-1][j-1]+1&lt;/code&gt;，即&lt;code&gt;ab&lt;/code&gt;-&amp;gt;&lt;code&gt;ab&lt;/code&gt;+1（替换）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ac&lt;/code&gt;-&amp;gt;&lt;code&gt;ace&lt;/code&gt; 对应 &lt;code&gt;dp[i][j-1]+1&lt;/code&gt;，即&lt;code&gt;ac&lt;/code&gt;-&amp;gt;&lt;code&gt;ac&lt;/code&gt;+1（增加）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;abc&lt;/code&gt;-&amp;gt;&lt;code&gt;ab&lt;/code&gt; 对应 &lt;code&gt;dp[i-1][j]+1&lt;/code&gt;，即&lt;code&gt;ab&lt;/code&gt;-&amp;gt;&lt;code&gt;ab&lt;/code&gt;+1（删除）&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;84&#34;&gt;8.4&lt;/h1&gt;
&lt;h2 id=&#34;acm-环lcs二进制枚举&#34;&gt;&lt;a href=&#34;http://hihocoder.com/contest/acmicpc2018beijingonline/problem/2&#34;&gt;ACM 环LCS（二进制枚举）&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/sugarbliss/article/details/82919592&#34;&gt;题解&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;第一次做这样的题目&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;substr&lt;/code&gt;的用法&lt;/li&gt;
&lt;li&gt;发现的错误：二进制枚举&lt;code&gt;非空&lt;/code&gt;子集，应该是&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;for(int i = 1;i&amp;lt;(1&amp;lt;&amp;lt;l);i++){&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;不是&lt;code&gt;for(int i = 1;i&amp;lt;=(1&amp;lt;&amp;lt;l);i++){&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;比如 l = 2&lt;/p&gt;
&lt;p&gt;1&amp;lt;&amp;lt;2 = 4 = (100)_2，枚举 &lt;code&gt;2^n-1个数&lt;/code&gt;，每一个都利用位运算&lt;code&gt;if(i&amp;amp;(1&amp;lt;&amp;lt;j))&lt;/code&gt;考察所有位&lt;/p&gt;
&lt;p&gt;000,001,010,011&lt;/p&gt;
&lt;p&gt;若写成&lt;code&gt;i&amp;lt;=(1&amp;lt;&amp;lt;l)&lt;/code&gt;，则就是有包括了 1&lt;code&gt;00&lt;/code&gt; ， 后两位皆是0&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;// ACM Tomb Raider
#include&amp;lt;map&amp;gt;
#include&amp;lt;vector&amp;gt;
#include&amp;lt;string&amp;gt;
#include&amp;lt;iostream&amp;gt;
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;algorithm&amp;gt; 
using namespace std;
map&amp;lt;string, int&amp;gt; all,vis;
vector&amp;lt;string&amp;gt; v; 
string temp,ss;
void ll(int ii){
	// loop
	ss = temp.substr(ii);
	ss += temp.substr(0,ii);
}
void solve(){
	int l = ss.size();
	string temps; 
	for(int i = 1;i&amp;lt;(1&amp;lt;&amp;lt;l);i++){
		temps.clear();
		for(int j = 0;j&amp;lt;l;j++){
			// 对每一位进行考察
			if(i&amp;amp;(1&amp;lt;&amp;lt;j)){
				temps += ss[j]; 
			} 
		}
		// 同一个 
		if(vis[temps] == 0 ){
			all[temps]++;
			vis[temps] = 1;
		}
	}
}
bool cmp(string s1,string s2){
	if(s1.size() != s2.size())return s1.size() &amp;gt; s2.size();
	else return s1&amp;lt;s2;
}
int main(){
	int nn;
	while(scanf(&amp;quot;%d&amp;quot;,&amp;amp;nn)!=EOF){
		vis.clear();
		all.clear();
		vector&amp;lt;string&amp;gt;().swap(v);
		for(int i = 0;i&amp;lt;nn;i++){
			cin &amp;gt;&amp;gt; temp;
			int lens = temp.size();
			// 拆环 
			for(int j = 0;j &amp;lt;lens;j++){
				ll(j);
				//  ss 是拆环的结果
				solve(); 
			}
			vis.clear();
		}
		map&amp;lt;string ,int &amp;gt;::iterator iter;
		for(iter = all.begin();iter!=all.end();iter++){
			if(iter-&amp;gt;second == nn){
//				printf(&amp;quot;*** %s\n&amp;quot;,iter-&amp;gt;first.c_str());
				v.push_back(iter-&amp;gt;first);
			}
		} 
		if(v.size() == 0){
			printf(&amp;quot;0\n&amp;quot;);
		}else{
			sort(v.begin(),v.end(),cmp);
//			printf(&amp;quot;%s\n&amp;quot;,v.begin()-&amp;gt;c_str());
			printf(&amp;quot;%s\n&amp;quot;,v[0].c_str());
		}
	}
} 
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;85&#34;&gt;8.5&lt;/h1&gt;
&lt;h2 id=&#34;打家劫舍-iii&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/house-robber-iii/solution/&#34;&gt;打家劫舍 III&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;类似于“没有上司的舞会”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int INF = 0x3f3f3f3f;
    int tot;
    int tott;
    int tra(TreeNode * root,vector&amp;lt;vector&amp;lt;int &amp;gt;&amp;gt; &amp;amp; dp){
        int l = INF;
        int r = INF;
        int l0,l1,r0,r1;
        int cur = tot++;
        dp[0].push_back(0);
        dp[1].push_back(1);
        if(root-&amp;gt;left!=NULL){
            l = tra(root-&amp;gt;left,dp);
        }
        if(root-&amp;gt;right!=NULL){
            r = tra(root-&amp;gt;right,dp);
        }
        if(root-&amp;gt;left!=NULL){
            l0 = dp[0][l];
            l1 = dp[1][l];
        }else{
            l0 = 0;
            l1 = 0;
        }
        if(root-&amp;gt;right!=NULL){
            r0 = dp[0][r];
            r1 = dp[1][r];
        }else{
            r0 = 0;
            r1 = 0;
        }
        dp[0][cur] = max(l0,l1)+max(r0,r1);
        dp[1][cur] = l0+r0 + root-&amp;gt;val;
        return cur;
    }
    int rob(TreeNode* root) {
        // 如何在不改变树的结构的情况下进行数据的处理
        if(root == NULL){
            return 0;
        }
        vector&amp;lt;vector&amp;lt;int &amp;gt;&amp;gt; dp;
        dp.push_back(vector&amp;lt;int &amp;gt;());
        dp.push_back(vector&amp;lt;int &amp;gt;());
        tra(root,dp);
        return max(dp[0][0],dp[1][0]);
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如何建立全局的&lt;code&gt;dp&lt;/code&gt;表？我想到的方法是返回左右的数组下标作为索引，而数组的开辟通过每个&lt;code&gt;dfs&lt;/code&gt;函数的入口&lt;code&gt;int cur = tot++;&lt;/code&gt;实现。&lt;/p&gt;
&lt;p&gt;更好的方法是，因为每一个节点的值只有两种情况&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如果该点不取，&lt;code&gt;return max(l,r)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果该点取，&lt;code&gt;return val+所有孙辈的最大值&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;其实每一个点在决策时只需要&lt;code&gt;最大值&lt;/code&gt;这一个，而二叉树的结构保证了孙辈个数 &lt;code&gt;&amp;lt;=4&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;因此有更方便的解法&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    // 每个节点都需要在返回自己的最大值情况下，同时返回孙辈的最大值
    int rrob(TreeNode * root,int &amp;amp; maxl,int &amp;amp; maxr){
        if(root == NULL){
            return 0;
        }
        // 孩子，返回的时候顺便帮我问一下孙辈的情况，我自己做决定
        int ll = 0,lr = 0,rl = 0,rr = 0;
        maxl = rrob(root-&amp;gt;left,ll,lr);
        maxr = rrob(root-&amp;gt;right,rl,rr);
        // 因此，这里也可以写作
        return max(root-&amp;gt;val + ll + lr + rl + rr,  maxl + maxr);
        // return int[3]{
            // max(root-&amp;gt;val + ll + lr + rl + rr,  maxl + maxr),
            // maxl
            // maxr};
    }
    int rob(TreeNode* root) {
        int l = 0,r = 0;
        return rrob(root,l,r);
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;86&#34;&gt;8.6&lt;/h1&gt;
&lt;h2 id=&#34;回文对&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/palindrome-pairs/solution/&#34;&gt;回文对&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;BF 算法可以得到 &lt;code&gt;O(n^2m)&lt;/code&gt;的复杂度&lt;/p&gt;
&lt;p&gt;如何避免&lt;code&gt;n&lt;/code&gt;过大带来的影响，可以考虑在遍历到每一个字符串的时候，采用hasing，不去考察其他的字符串，直接通过预处理保存所有的字符串信息&lt;/p&gt;
&lt;p&gt;空间复杂度相对较大，需要存储所有反向子串，&lt;code&gt;O(nm)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这里有一个&lt;a href=&#34;https://www.cnblogs.com/cjyyb/p/9242149.html&#34;&gt;题解&lt;/a&gt;很有意思。因为在stl的hashing 函数当中不支持 hasing 的拼接&lt;/p&gt;
&lt;ul class=&#34;contains-task-list&#34;&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input class=&#34;task-list-item-checkbox&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-3946236&#34;&gt; &lt;a href=&#34;https://blog.csdn.net/n20164206199/article/details/104683963?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&#34;&gt;Hasing回文&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-3946236&#34;&gt; [Hasing回文](https://blog.csdn.net/n20164206199/article/details/104683963?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param)&lt;/label&gt;&lt;/li&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input class=&#34;task-list-item-checkbox&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-5682655&#34;&gt; &lt;a href=&#34;https://www.cnblogs.com/cjyyb/p/9242149.html&#34;&gt;Hashing 相关知识&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-5682655&#34;&gt; [Hashing 相关知识](https://www.cnblogs.com/cjyyb/p/9242149.html)&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;class Solution {
public:
    set&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; ans;
    map&amp;lt;string,int &amp;gt; rsi;
    string temp;
    vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; aans;
    map&amp;lt;string,int &amp;gt;::iterator it;
    int find(string s,int i ,int j){
        // if(i&amp;gt;j) return -1;
        if(i&amp;gt;j) it = rsi.find(&amp;quot;&amp;quot;);
        it = rsi.find(s.substr(i,j-i+1));
        if(it == rsi.end())return -1;
        else return it-&amp;gt;second;
    }
    bool mir(string s, int b, int e){
        // if(b&amp;gt;e)return false;
        // if(s.size() == 0 || b = e)return true;
        if(s.size() == 0 || b &amp;gt;= e)return true;
        for(int i = 0;i&amp;lt;=(e-b)/2;i++){
            if(s[b+i]!=s[e-i])return false;
        }
        return true;
    }
    vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; palindromePairs(vector&amp;lt;string&amp;gt;&amp;amp; words) {
        int n = words.size();
        for(int i = 0;i&amp;lt;words.size();i++){
            temp.assign(words[i].rbegin(),words[i].rend());
            rsi[temp] = i;
        }
        
        for(int i = 0;i&amp;lt;n;i++){
            string s;
            // s.assign(words[i].rbegin(),words[i].rend());
            s = words[i];
            int m = s.size();
            for(int j = 0;j&amp;lt;m;j++){
                if(mir(s,j,m-1)){
                    // 左侧
                    int r = find(s,0,j-1);
                    if(r != -1 &amp;amp;&amp;amp; r != i){
                        ans.insert({i,r});
                    }
                }
                // if(mir(s,0,j-1)){
                if(mir(s,0,j-1)){
                    // 右侧
                    int l = find(s,j,m-1);
                    if(l != -1 &amp;amp;&amp;amp; l != i){
                        ans.insert({l,i});
                    }
                }
            }
        }
        aans.assign(ans.begin(),ans.end());
        return aans;
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;输入：&lt;/p&gt;
&lt;p&gt;[&amp;quot;a&amp;quot;,&amp;quot;&amp;quot;]&lt;/p&gt;
&lt;p&gt;输出：&lt;/p&gt;
&lt;p&gt;[[0,1]]&lt;/p&gt;
&lt;p&gt;预期结果：&lt;/p&gt;
&lt;p&gt;[[0,1],[1,0]]&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;明天继续研究吧&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;😆哈哈，十一点半做出来了！虽然本身以为优化了题解但是没有hhh，但是还是自己发现了问题！&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;class Solution {
public:
    set&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; ans;
    map&amp;lt;string,int &amp;gt; rsi;
    string temp;
    vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; aans;
    map&amp;lt;string,int &amp;gt;::iterator it;
    int find(string s,int i ,int l){
        // if(i&amp;gt;j) return -1;
        it = rsi.find(s.substr(i,l));
        if(it == rsi.end())return -1;
        else return it-&amp;gt;second;
    }
    bool mir(string s, int b, int l){
        // if(b&amp;gt;e)return false;
        // if(s.size() == 0 || b = e)return true;
        if(l == 0 || s.size() == 0)return true;
        int e = b+l-1;
        for(int i = 0;i&amp;lt;=(e-b)/2;i++){
            if(s[b+i]!=s[e-i])return false;
        }
        return true;
    }
    vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt; palindromePairs(vector&amp;lt;string&amp;gt;&amp;amp; words) {
        int n = words.size();
        for(int i = 0;i&amp;lt;words.size();i++){
            temp.assign(words[i].rbegin(),words[i].rend());
            rsi[temp] = i;
        }
        
        for(int i = 0;i&amp;lt;n;i++){
            string s = words[i];
            int m = s.size();
            for(int l = 0;l&amp;lt;=m;l++){
                if(mir(s,l,m-l)){
                    // 左侧
                    // 语义规范
                    int ri = find(s,0,l);
                    if(ri != -1 &amp;amp;&amp;amp; ri != i){
                        ans.insert({i,ri});
                    }
                }
                if(mir(s,0,m-l)){
                    // 右侧
                    int li = find(s,m-l,l);
                    if(li != -1 &amp;amp;&amp;amp; li != i){
                        ans.insert({li,i});
                    }
                }
            }
        }
        aans.assign(ans.begin(),ans.end());
        return aans;
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;tricks&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;采用set 去重&lt;/li&gt;
&lt;li&gt;采用枚举区间长度的方法 &lt;code&gt;begin &amp;amp; length&lt;/code&gt;，解决枚举空串的问题&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;87&#34;&gt;8.7&lt;/h1&gt;
&lt;h2 id=&#34;二分查找有序数组的中位数&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/median-of-two-sorted-arrays/&#34;&gt;二分查找——有序数组的中位数&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;思想&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;二分查找&lt;/li&gt;
&lt;li&gt;交叉小于——将数组的一边看成整体&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;写了一上午，虽然看了题解，但是还是想了很久&lt;/p&gt;
&lt;p&gt;还是那个小问题，如何如何解决空字符的问题，其实加哨兵就可以了，但是这里如果加哨兵就会影响总体的时间复杂度&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;class Solution {
public:
    int INF = 0x3f3f3f3f;
    double findMedianSortedArrays(vector&amp;lt;int&amp;gt;&amp;amp; nums1, vector&amp;lt;int&amp;gt;&amp;amp; nums2) {
        if(nums2.size()&amp;lt;nums1.size()){
            nums1.swap(nums2);
        }
        int len1 = nums1.size();
        int len2 = nums2.size();
        int nleft = (len1 + len2 + 1)/2;

        // 枚举的是短序列左侧区间的字符数量
        int l = 0;
        int r = len1;

        while(l&amp;lt;r){
            int mid = (l+r)/2;
            int i = mid, j = nleft - mid;
            printf(&amp;quot;l = %d r = %d mid = %d j = %d nleft = %d\n&amp;quot;,l,r,mid,j,nleft);

            int l1 = i == 0?-INF:nums1[i-1];
            int r1 = i == len1?INF:nums1[i];
            int l2 = j == 0?-INF:nums2[j-1];
            int r2 = j == len2?INF:nums2[j];
            printf(&amp;quot;\tl1 = %d r1 = %d\n\tl2 = %d r2 = %d\n&amp;quot;,l1,r1,l2,r2);
            // if(nums1[mid-1]&amp;gt;nums2[j] || nums2[j-1] &amp;gt; nums1[mid]){
            // if(l1&amp;gt;nums2[j] || l2&amp;gt;nums1[mid]){
            if(l1&amp;gt;r2 || l2&amp;lt;r1){
                r = mid;
            }else{
                l = mid + 1;
            }
        }

        int i = l,j = nleft - i;

        int l1 = i == 0?-INF:nums1[i-1];
        int r1 = i == len1?INF:nums1[i];
        int l2 = j == 0?-INF:nums2[j-1];
        int r2 = j == len2?INF:nums2[j];

        if((len1 + len2) % 2== 1){
            return max(l1,l2);
        }else{
            return (max(l1,l2) + min(r1,r2))*1.0/2;
        }
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;ul class=&#34;contains-task-list&#34;&gt;
&lt;li class=&#34;task-list-item&#34;&gt;
&lt;p&gt;&lt;input class=&#34;task-list-item-checkbox&#34; checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-1819093&#34;&gt;&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-1819093&#34;&gt; 总结一下二分查找的模板、&lt;/label&gt;&lt;/p&gt;
&lt;p&gt;我自己一般是这样写的，由于整数除法向下取整，所以左边界向右扩展可以保证区间长度递减&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;int l = 0, r = len;
while(l&amp;lt;r){
	int mid = (l+r)/2;
    if(...) l = mid+1;
    else r = mid;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;题解当中使用了这样的二分查找&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cPp&#34;&gt;while(l &amp;lt; r){
    int i = (l + r + 1)/2; // 当进行到[3,4]这样的区间时，取右侧端点作为 mid
    int j = total - i;
    // 这种情况下不会出现 i = 0 的情况
    // 只有 i = 1时，可能出现 r = 1-1 = 0;从而得到[0,0]区间的情况
    if(nums1[i-1] &amp;gt; nums2[j]) r = i-1;
    else l = i;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;为什么只有一个判断条件呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;我写的是 &lt;code&gt;l1&amp;gt;r2 || l2&amp;lt;r1&lt;/code&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;情况&lt;/th&gt;
&lt;th&gt;动作&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;l1&amp;gt;r2 &amp;amp;&amp;amp; l2 &amp;gt; r1&lt;/td&gt;
&lt;td&gt;&lt;u&gt;***不可能出现！***&lt;/u&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;l1&amp;gt;r2 &amp;amp;&amp;amp; l2 &amp;lt;=r1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;i-=?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;l1&amp;lt;=2 &amp;amp;&amp;amp; l2 &amp;gt; r1&lt;/td&gt;
&lt;td&gt;i+=?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;l1&amp;lt;=r2 &amp;amp;&amp;amp; l2 &amp;lt;= r1&lt;/td&gt;
&lt;td&gt;满足条件&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;按道理来说，我的这个写法是错误的&lt;/p&gt;
&lt;p&gt;应该是写明白才好&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;if(l1&amp;gt;r2 &amp;amp;&amp;amp; l2&amp;lt;=r1){
 r = mid;
}else if(l1&amp;lt;=r2 &amp;amp;&amp;amp; l2&amp;gt;r1){
 l = mid + 1;
}else if(l1&amp;lt;=r2 &amp;amp;&amp;amp; l2&amp;lt;=r1){
 l = mid;
 break;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;重做一下这道题目&lt;/p&gt;
&lt;h3 id=&#34;两个有序数组寻找第-k-小元素&#34;&gt;两个有序数组寻找第 K 小元素&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;class Solution {
public:
    int INF = 0x3f3f3f3f;
    int findk(vector&amp;lt;int&amp;gt;&amp;amp; nums1, vector&amp;lt;int&amp;gt;&amp;amp; nums2,int k){
        int len1 = nums1.size();
        int len2 = nums2.size();

        int base1 = 0, base2 = 0;
        int cur1 = 0, cur2 = 0;

        while(1){
            cur1  = base1 + k/2 - 1;
            cur2  = base2 + k/2 - 1;
            printf(&amp;quot;cur1 = %d cur2 =%d k = %d\n&amp;quot;,cur1,cur2,k);
            if(base1 &amp;gt; len1 - 1){
                return nums2[base2 + k - 1];
            }
            if(base2 &amp;gt; len2 - 1){
                return nums1[base1 + k - 1];
            }
            if(k == 1){
                return min(nums1[base1],nums2[base2]);
            }
            cur1 = min(len1 - 1,base1 + k/2 - 1);
            cur2 = min(len2 - 1,base2 + k/2 - 1);
            
            if(nums1[cur1] &amp;lt; nums2[cur2]){
                k -= cur1 - base1 +1;
                base1 = cur1 + 1;
            }else{
                k -= cur2 - base2 +1;
                base2 = cur2 + 1;
            }
        }
    }
    double findMedianSortedArrays(vector&amp;lt;int&amp;gt;&amp;amp; nums1, vector&amp;lt;int&amp;gt;&amp;amp; nums2) {
        int l1 = nums1.size();
        int l2 = nums2.size();
        int k1 = (l1+l2+1)/2;
        int k2 = (l1+l2+2)/2;
        if((l1+l2)%2 == 0){
            return double(findk(nums1,nums2,k1) + findk(nums1,nums2,k2))*1.0/2;
        }else{
            return findk(nums1,nums2,k1);
        }
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/median-of-two-sorted-arrays/solution/cong-yi-ban-dao-te-shu-de-fang-fa-dai-ma-jing-jian/&#34;&gt;这个小技巧不错：统一中位数的计算&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;k1 = (l1+l2+1)/2; k2 = (l1+l2+2)/2
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;88&#34;&gt;8.8&lt;/h1&gt;
&lt;h2 id=&#34;恢复二叉树&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/recover-binary-search-tree/&#34;&gt;恢复二叉树&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector&amp;lt;TreeNode* &amp;gt; v;
    void dfs(TreeNode * node){
        if(node-&amp;gt;left) dfs(node-&amp;gt;left);
        v.push_back(node);
        if(node-&amp;gt;right) dfs(node-&amp;gt;right);
    }
    void recoverTree(TreeNode* root) {
        dfs(root);
        vector&amp;lt;int &amp;gt; ans;
        for(int i = 0;i&amp;lt;v.size()-1;i++){
            if(v[i]-&amp;gt;val&amp;gt;v[i+1]-&amp;gt;val){
                ans.push_back(i);
                break;
            }
        }
        for(int i = v.size()-1;i&amp;gt;=1;i--){
            if(v[i]-&amp;gt;val&amp;lt;v[i-1]-&amp;gt;val){
                ans.push_back(i);
                break;
            }
        }
        if(ans.size() == 1){
            swap(v[ans[0]]-&amp;gt;val,v[ans[0]-1]-&amp;gt;val);
        }else if(ans.size() == 2){
            swap(v[ans[0]]-&amp;gt;val,v[ans[1]]-&amp;gt;val);
        }
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/AnnieKim/archive/2013/06/15/MorrisTraversal.html&#34;&gt;Morris 前中后序遍历——分摊时间复杂度分析&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int INF = 0x3f3f3f3f;
    TreeNode* pred;
    vector&amp;lt;TreeNode * &amp;gt; ans,anspred;
    void ldr(TreeNode * root){
        // Morris 遍历
        TreeNode * cur = root, * pred = nullptr;
        while(cur != nullptr){
            printf(&amp;quot;%d\n&amp;quot;,cur-&amp;gt;val);
            if(cur-&amp;gt;left== nullptr){
                // 左侧子树访问完毕，访问cur 节点
                if(pred!=nullptr &amp;amp;&amp;amp; cur-&amp;gt;val &amp;lt; pred-&amp;gt;val){
                    ans.push_back(cur);
                    anspred.push_back(pred);
                }
                pred = cur;
                cur = cur-&amp;gt;right;
            }else{
                TreeNode * lrm = cur-&amp;gt;left;
                // 寻找左侧子树最优节点（pred）
                while(lrm-&amp;gt;right != nullptr &amp;amp;&amp;amp; lrm-&amp;gt;right != cur) lrm = lrm-&amp;gt;right;
                if(lrm -&amp;gt; right == nullptr){
                    lrm-&amp;gt;right = cur;
                    cur = cur-&amp;gt;left;
                }else if(lrm == nullptr || lrm-&amp;gt;right == cur){
                    // 访问一个没有左侧节点的子节点cur（最左下节点）
                    if(pred!=nullptr &amp;amp;&amp;amp; cur-&amp;gt;val &amp;lt; pred-&amp;gt;val){
                        ans.push_back(cur);
                        anspred.push_back(pred);
                    }
                    lrm-&amp;gt;right = nullptr;
                    pred = cur;
                    cur = cur-&amp;gt;right;
                }
            }
        }
    }
    void recoverTree(TreeNode* root) {
        ldr(root);
        if(ans.size() == 1){
            swap(ans[0]-&amp;gt;val,anspred[0]-&amp;gt;val);
        }else if(ans.size() == 2){
            swap(anspred[0]-&amp;gt;val,ans[1]-&amp;gt;val);
        }
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;89&#34;&gt;8.9&lt;/h1&gt;
&lt;h2 id=&#34;复原ip地址&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/restore-ip-addresses/&#34;&gt;复原IP地址&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;解决不可以连续读零的问题&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt; 这一个测试用例 &lt;code&gt;&amp;quot;010010&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;设置标志位，表明读到了一个零&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;if(temp == 0) return;
if(temp == INF) temp = 0;// 一个新数字的开始
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;class Solution {
public:
    vector&amp;lt;string&amp;gt; ans;
    int len;
    int INF = 0x3f3f3f3f;
    vector&amp;lt;int&amp;gt; temps;
    string getans(){
        string r;
        if(temps.size() == 4){
            for(int i = 0;i&amp;lt;3;i++){
                r += to_string(temps[i])+&amp;quot;.&amp;quot;;
            }
            r+= to_string(temps[3]);
        }
        return r;
    }
    void dfs(string &amp;amp;s, int num, int cur,int temp){
        if(cur == len ^ num ==4) return;
        else if(num == 4 &amp;amp;&amp;amp; cur == len){
            ans.push_back(getans());
            return;
        }
        if(temp == 0) return;
        if(temp == INF) temp = 0;// 一个新数字的开始
        int newtemp = temp* 10 + s[cur] -&#39;0&#39;;
        printf(&amp;quot;%d\n&amp;quot;,newtemp);
        if(newtemp &amp;gt; 255)return ;
        if(newtemp&amp;lt;=255){
            temps.push_back(newtemp);
            dfs(s,num+1,cur+1,INF);
            temps.pop_back();
        }
        dfs(s,num,cur+1,newtemp);
    }
    vector&amp;lt;string&amp;gt; restoreIpAddresses(string s) {
        len = s.size();
        dfs(s,0,0,INF);
        return ans;
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;最长有效括号子串&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/longest-valid-parentheses/solution/https://leetcode-cn.com/problems/longest-valid-parentheses/solution/&#34;&gt;最长有效括号子串&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;验证一个子串是不是括号需要 &lt;code&gt;O(n)&lt;/code&gt;的时间&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;计数器&lt;/li&gt;
&lt;li&gt;栈&lt;/li&gt;
&lt;li&gt;动态规划&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这有一步很巧妙的处理：&lt;code&gt;init: st.push(-1);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;这样相当于&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;1&#34;&gt;&lt;img src=&#34;https://assets.leetcode-cn.com/solution-static/32/3.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;2&#34;&gt;&lt;img src=&#34;https://assets.leetcode-cn.com/solution-static/32/11.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;和栈空不一样，这里每一个合法括号串匹配完成后都可以找到一个起始位置 &lt;code&gt;st.top()&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;class Solution {
public:
    stack&amp;lt;int &amp;gt; st;
    int ans;
    int longestValidParentheses(string s) {
        int len = s.size();
        int cur = 0;
        st.push(-1);
        while(cur &amp;lt; len){
            if(s[cur] == &#39;(&#39;){
                st.push(cur);
            }
            else if(s[cur] == &#39;)&#39;){
                if(st.empty()){
                    st.push(cur);
                }else{
                    st.pop();
                    if(st.empty()){
                        // 更新连续可行串起点
                        st.push(cur);
                    }else{
                        // 更新答案
                        ans = max(ans,cur - st.top());
                    }
                }
            }
            cur ++;
        }
        return ans;
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;810&#34;&gt;8.10&lt;/h1&gt;
&lt;h2 id=&#34;重做正则表达式匹配&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/regular-expression-matching/&#34;&gt;重做正则表达式匹配&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&#34;阶段总结&#34;&gt;阶段总结&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;动态规划&lt;/p&gt;
&lt;p&gt;正则表达式匹配，编辑距离，打家劫舍Ⅲ（单点递归）、最长有效括号子串&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;搜索&lt;/p&gt;
&lt;p&gt;PAT 1018，复原IP&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;二分查找&lt;/p&gt;
&lt;p&gt;有序数组的中位数&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;二进制枚举&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;下一阶段的任务十天刷完剑指offer&#34;&gt;下一阶段的任务：&lt;strong&gt;十天刷完剑指offer&lt;/strong&gt;&lt;/h2&gt;
">DSA 2020 8.1-8.10</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/linear-algebra-xian-xing-dai-shu/"" data-c="
          &lt;blockquote&gt;
&lt;p&gt;线性代数概念的理解&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;vector-matrix&#34;&gt;Vector / Matrix&lt;/h1&gt;
&lt;h2 id=&#34;whats-a-vector&#34;&gt;What’s a vector?&lt;/h2&gt;
&lt;p&gt;向量实际上是具有n 维属性的一个较为复杂的客观实体&lt;/p&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo&gt;{&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;.&lt;/mi&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;}&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;x = \{x_1,x_2,...,x_n\}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.43056em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.30110799999999993em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.15em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.30110799999999993em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.15em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.151392em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.15em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&#34;linear-transformationthe-essence-of-matrix&#34;&gt;Linear transformation:&lt;code&gt;the essence of Matrix&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;矩阵实际上代表一个线性变换&lt;/p&gt;
&lt;h1 id=&#34;basis&#34;&gt;Basis&lt;/h1&gt;
&lt;h2 id=&#34;basis-2&#34;&gt;Basis&lt;/h2&gt;
&lt;p&gt;一组可以&lt;strong&gt;张成该空间&lt;/strong&gt;的，&lt;strong&gt;线性无关&lt;/strong&gt;的向量的集合称为一组&lt;strong&gt;基&lt;/strong&gt;&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;1&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200726174810.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h3 id=&#34;dimension&#34;&gt;Dimension&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;The number of vectors in &lt;strong&gt;any&lt;/strong&gt; basis of V is called the &lt;em&gt;&lt;strong&gt;dimension&lt;/strong&gt;&lt;/em&gt; of V, and is written dim(V).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;bases-as-coordinate-systems&#34;&gt;&lt;strong&gt;Bases as Coordinate Systems&lt;/strong&gt;&lt;/h3&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;2&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200727152659.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h2 id=&#34;span-张成的子空间&#34;&gt;Span 张成的子空间&lt;/h2&gt;
&lt;p&gt;线性组合&lt;/p&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mrow&gt;&lt;mo fence=&#34;true&#34;&gt;(&lt;/mo&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;.&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;.&lt;/mi&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;mo fence=&#34;true&#34;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mrow&gt;&lt;mo fence=&#34;true&#34;&gt;{&lt;/mo&gt;&lt;mrow&gt;&lt;munderover&gt;&lt;mo&gt;∑&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/munderover&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;α&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;mtext&gt;  &lt;/mtext&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∣&lt;/mi&gt;&lt;mtext&gt;  &lt;/mtext&gt;&lt;msub&gt;&lt;mi&gt;c&lt;/mi&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;mi mathvariant=&#34;double-struck&#34;&gt;R&lt;/mi&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;mo fence=&#34;true&#34;&gt;}&lt;/mo&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;S\left( {{\alpha _1},...,{\alpha _n}} \right) = \left\{ {\sum\limits_{i = 1}^n {{c_i}{\alpha _i}\;|\;{c_i} \in \mathbb{R}} } \right\}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.05764em;&#34;&gt;S&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;minner&#34;&gt;&lt;span class=&#34;mopen delimcenter&#34; style=&#34;top:0em;&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.0037em;&#34;&gt;α&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.30110799999999993em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:-0.0037em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.15em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.0037em;&#34;&gt;α&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.151392em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:-0.0037em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.15em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mclose delimcenter&#34; style=&#34;top:0em;&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:3.027669em;vertical-align:-1.277669em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;minner&#34;&gt;&lt;span class=&#34;mopen delimcenter&#34; style=&#34;top:0em;&#34;&gt;&lt;span class=&#34;delimsizing size4&#34;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mop op-limits&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.6513970000000002em;&#34;&gt;&lt;span style=&#34;top:-1.872331em;margin-left:0em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mrel mtight&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mord mtight&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-3.050005em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#34;mop op-symbol large-op&#34;&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-4.3000050000000005em;margin-left:0em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.277669em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.31166399999999994em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.15em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.0037em;&#34;&gt;α&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.31166399999999994em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:-0.0037em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.15em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;∣&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.31166399999999994em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.15em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;∈&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathbb&#34;&gt;R&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mclose delimcenter&#34; style=&#34;top:0em;&#34;&gt;&lt;span class=&#34;delimsizing size4&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://math.stackexchange.com/questions/1264018/the-definition-of-span&#34;&gt;which is the set of all linear combinations of the vectors in this subspace.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;column-space-列空间&#34;&gt;Column Space 列空间&lt;/h3&gt;
&lt;p&gt;列向量的所有线性组合的集合构成的子空间&lt;/p&gt;
&lt;h3 id=&#34;row-space&#34;&gt;Row Space&lt;/h3&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;3&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200726174629.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h3 id=&#34;null-space-kernel-零空间-nullity&#34;&gt;Null Space (Kernel) 零空间 &amp;amp; Nullity&lt;/h3&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;4&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200726182342.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h3 id=&#34;intuative-theorems&#34;&gt;Intuative Theorems&lt;/h3&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;dim&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mtext&gt;rowspace&lt;/mtext&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;dim&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mtext&gt;colspace&lt;/mtext&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mtext&gt;rank&lt;/mtext&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mtext&gt;rank&lt;/mtext&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mtext&gt;nullity&lt;/mtext&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\dim(\text{rowspace}(A)) = \dim(\text{colspace}(A))  = \text{rank}(A)
\\
\text{rank}(A) + \text{nullity}(A) = n
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mop&#34;&gt;dim&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;rowspace&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mop&#34;&gt;dim&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;colspace&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;rank&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;rank&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;nullity&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.43056em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&#34;rank&#34;&gt;&lt;strong&gt;Rank&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;列空间的维数叫做秩&lt;/p&gt;
&lt;p&gt;The number of dimensions in the column space.&lt;/p&gt;
&lt;h2 id=&#34;linearly-dependent-线性相关&#34;&gt;Linearly Dependent 线性相关&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;at least one of the vectors in the set can be written as a&lt;/em&gt; &lt;strong&gt;linear&lt;/strong&gt; &lt;em&gt;combination of the others.&lt;/em&gt;&lt;/p&gt;
&lt;h1 id=&#34;transformation&#34;&gt;Transformation&lt;/h1&gt;
&lt;h2 id=&#34;determinant-行列式-决定式&#34;&gt;Determinant 行列式 / 决定式&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;🤔 为什么行列式被叫做这个名字？&lt;/p&gt;
&lt;p&gt;我一直觉得翻译为确定式或者决定式比较恰当。中文叫行列式应该是出于形状的考虑，因为determinant的形状就是几行几列的数表，另外也可能是受到日本翻译的影响，日本把determinant成为行列式，把matrix称为行列&lt;/p&gt;
&lt;p&gt;行列式为什么称作“行列式”？ - fever wong的回答 - 知乎&lt;br&gt;
https://www.zhihu.com/question/332671271/answer/733861760&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;理解成“决定式” / “不变式”更合理&lt;/p&gt;
&lt;p&gt;表征了线性变换的总体效应度量&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;5&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200402174825.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;6&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200402175751.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h2 id=&#34;rank-秩&#34;&gt;Rank 秩&lt;/h2&gt;
&lt;p&gt;线性变换得到的子空间的维数&lt;/p&gt;
&lt;h3 id=&#34;rank-one-decomposition&#34;&gt;Rank-One Decomposition&lt;/h3&gt;
&lt;h2 id=&#34;inverse-matrix&#34;&gt;Inverse Matrix&lt;/h2&gt;
&lt;p&gt;存在条件&lt;/p&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;rank&lt;/mtext&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;≠&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\text{rank}(A) \neq 0
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;rank&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;&lt;span class=&#34;mrel&#34;&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.69444em;&#34;&gt;&lt;span style=&#34;top:-3em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;rlap&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8888799999999999em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;inner&#34;&gt;&lt;span class=&#34;mrel&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;fix&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.19444em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.64444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&#34;similarity&#34;&gt;Similarity&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;:happy:&lt;em&gt;&lt;strong&gt;similar matrices do the same thing in different coordinate systems (with the help of BASIS TRANSOFRMATION)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.zhihu.com/question/20501504/answer/174887899&#34;&gt;知乎：同一个线性变换（结果相同）在不同的基中对应的变换矩阵（实际上是一种形式），称为相似矩阵&lt;/a&gt;&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;7&#34;&gt;&lt;img src=&#34;https://picb.zhimg.com/80/v2-a930e73146b324aa43fffff8378407a9_1440w.jpg?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;8&#34;&gt;&lt;img src=&#34;!%5B%5D(https://gitee.com/ZXYFrank/picgo/raw/master/img/20200729174701.png)&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;9&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200727154151.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://textbooks.math.gatech.edu/ila/similarity.html#similarity-to-rotation&#34;&gt;Interactive examples&lt;/a&gt;&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;10&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200727150207.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h2 id=&#34;eigen-value-eigen-vectors&#34;&gt;Eigen Value &amp;amp; Eigen vectors&lt;/h2&gt;
&lt;div style=&#34;position: relative; padding: 30% 45%;&#34;&gt;
&lt;iframe style=&#34;position: absolute; width: 100%; height: 100%; left: 0; top: 0;&#34; src=&#34;https://player.bilibili.com/player.html?aid=6731067&amp;bvid=BV1ys411472E&amp;cid=10959724&amp;page=14&amp;as_wide=1&amp;high_quality=1&amp;danmaku=0&#34; frameborder=&#34;no&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;λ&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;λ&lt;/mi&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;Ax = \lambda x\\
A(kx)  = \lambda (kx)
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.68333em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.69444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;λ&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03148em;&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;λ&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03148em;&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;一个特征值对应无穷多特征向量&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;11&#34;&gt;&lt;img src=&#34;assets/1595926932098.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;🤔&lt;strong&gt;Eigen is a German word meaning &amp;quot;own&amp;quot; or &amp;quot;typical&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;12&#34;&gt;&lt;img src=&#34;https://pic4.zhimg.com/80/v2-796ca41c58e1276206858278871580eb_1440w.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;13&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200627214858.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;λ&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∃&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;≠&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo&gt;→&lt;/mo&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∣&lt;/mi&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;λ&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∣&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;Ax = \lambda x\\
\exists x \neq 0 \to|A-\lambda|x = 0 \\
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.68333em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.69444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;λ&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8888799999999999em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;∃&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;&lt;span class=&#34;mrel&#34;&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.69444em;&#34;&gt;&lt;span style=&#34;top:-3em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;rlap&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8888799999999999em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;inner&#34;&gt;&lt;span class=&#34;mrel&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;fix&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.19444em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.64444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;→&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;∣&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;−&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;λ&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;∣&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.64444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&#34;properties&#34;&gt;Properties&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Eigenvalues&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;munderover&gt;&lt;mo&gt;∏&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/munderover&gt;&lt;mi&gt;λ&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∣&lt;/mi&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∣&lt;/mi&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;munderover&gt;&lt;mo&gt;∑&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/munderover&gt;&lt;mi&gt;λ&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mtext&gt;Tr&lt;/mtext&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\prod_{i = 1}^{n}\lambda = |A|\\
\sum_{i = 1}^{n}\lambda = \text{Tr}(A)
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:2.929066em;vertical-align:-1.277669em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mop op-limits&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.6513970000000002em;&#34;&gt;&lt;span style=&#34;top:-1.872331em;margin-left:0em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mrel mtight&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mord mtight&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-3.050005em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#34;mop op-symbol large-op&#34;&gt;∏&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-4.3000050000000005em;margin-left:0em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.277669em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;λ&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;∣&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;∣&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:2.929066em;vertical-align:-1.277669em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mop op-limits&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.6513970000000002em;&#34;&gt;&lt;span style=&#34;top:-1.872331em;margin-left:0em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mrel mtight&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mord mtight&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-3.050005em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#34;mop op-symbol large-op&#34;&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-4.3000050000000005em;margin-left:0em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.277669em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;λ&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;Tr&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eigenvectors&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;k重特征值至多有k个线性无关的特征向量&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;不同特征值对应的特征向量线性无关&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;同一个特征值的特征向量有无数个&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;不同非零特征值对应的非零特征向量的线性组合不是特征向量&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200802112921.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;what-if-there-are-complex-eigenvalues&#34;&gt;&lt;em&gt;What if there are complex eigenvalues&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://textbooks.math.gatech.edu/ila/complex-eigenvalues.html&#34;&gt;Interactive Illustartion : Complex Eigenvalues&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;⭐️They come in pairs&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;14&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200726184001.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;As a consequence of the &lt;a href=&#34;https://textbooks.math.gatech.edu/ila/complex-eigenvalues.html&#34;&gt;fundamental theorem of algebra&lt;/a&gt; as applied to the characteristic polynomial, we see that:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Every n×n matrix has exactly n complex eigenvalues, counted with multiplicity.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;rotation-scaling-theorem&#34;&gt;&lt;strong&gt;Rotation-Scaling Theorem&lt;/strong&gt;&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;the essence of the complex eigenvectors and eigenavalues is that it&lt;/p&gt;
&lt;p&gt;eigenvector generates &lt;u&gt;&lt;em&gt;&lt;strong&gt;the basis transformation&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;eigenvalue performs the action(&lt;u&gt;&lt;em&gt;&lt;strong&gt;rotation and scaling&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;15&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200727150521.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=qlUr2Jc5O0g&#34;&gt;Youtube:Geometry of Real and Complex Eigenvalues&lt;/a&gt;&lt;/p&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;λ&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mi&gt;ξ&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;mi mathvariant=&#34;double-struck&#34;&gt;R&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\lambda = a+ib \\ {\bf{\xi}} = x+iy\\
\\(a,b,x,y \in \R)  \\
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.69444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;λ&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.66666em;vertical-align:-0.08333em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.69444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;b&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8888799999999999em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.04601em;&#34;&gt;ξ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.66666em;vertical-align:-0.08333em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.85396em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03588em;&#34;&gt;y&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03588em;&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;∈&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathbb&#34;&gt;R&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mi&gt;ξ&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;λ&lt;/mi&gt;&lt;mi&gt;ξ&lt;/mi&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;A\xi = \lambda \xi\\
Ax + iAy = (ax-by)+i(ax+by)\\
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8888799999999999em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.04601em;&#34;&gt;ξ&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8888799999999999em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;λ&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.04601em;&#34;&gt;ξ&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.76666em;vertical-align:-0.08333em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8777699999999999em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03588em;&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;−&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03588em;&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03588em;&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mn&gt;1.&lt;/mn&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mn&gt;2.&lt;/mn&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mrow&gt;&lt;mo fence=&#34;true&#34;&gt;(&lt;/mo&gt;&lt;mtable&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&#34;0&#34; displaystyle=&#34;false&#34;&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&#34;0&#34; displaystyle=&#34;false&#34;&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;mtr&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&#34;0&#34; displaystyle=&#34;false&#34;&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;mtd&gt;&lt;mstyle scriptlevel=&#34;0&#34; displaystyle=&#34;false&#34;&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;/mstyle&gt;&lt;/mtd&gt;&lt;/mtr&gt;&lt;/mtable&gt;&lt;mo fence=&#34;true&#34;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;1.Ax = ax-by
\\
2.Ay= ax+by
\\
A = 
 \left(
 \begin{matrix}
   a &amp;amp; b\\
   -b &amp;amp;a
  \end{matrix}
  \right)
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.68333em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.66666em;vertical-align:-0.08333em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;−&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8888799999999999em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03588em;&#34;&gt;y&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8777699999999999em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03588em;&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.66666em;vertical-align:-0.08333em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8888799999999999em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03588em;&#34;&gt;y&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.68333em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:2.40003em;vertical-align:-0.95003em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;minner&#34;&gt;&lt;span class=&#34;mopen delimcenter&#34; style=&#34;top:0em;&#34;&gt;&lt;span class=&#34;delimsizing size3&#34;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mtable&#34;&gt;&lt;span class=&#34;col-align-c&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.45em;&#34;&gt;&lt;span style=&#34;top:-3.61em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-2.4099999999999997em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;−&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;b&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.9500000000000004em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;arraycolsep&#34; style=&#34;width:0.5em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;arraycolsep&#34; style=&#34;width:0.5em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;col-align-c&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.45em;&#34;&gt;&lt;span style=&#34;top:-3.61em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;b&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-2.4099999999999997em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.9500000000000004em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mclose delimcenter&#34; style=&#34;top:0em;&#34;&gt;&lt;span class=&#34;delimsizing size3&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;That&#39;s to say, the A matrix &lt;strong&gt;rotates and stretches&lt;/strong&gt; x &amp;amp; y(the vectors in real and imaginary parts of the eigen vectors.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Geometrically, the rotation-scaling theorem says that a 2×2 matrix with a complex eigenvalue behaves similarly to a rotation-scaling matrix.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;❗️ So, actually &lt;strong&gt;the PLANE spaned by x,y&lt;/strong&gt;(components in Re/Im part of the complex eigen vector) remains kind of invariant.&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;16&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200727141122.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&#34;https://textbooks.math.gatech.edu/ila/similarity.html#similarity-to-rotation&#34;&gt;Interactive math: similarity to rotation&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;the-effect-of-lambdas-norm&#34;&gt;the effect of lambda’s norm&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;the Re and Im part determine 2 basis vector that’s gonna be rotated and stretched
&lt;ol&gt;
&lt;li&gt;or you can say that they defined the basis transformation&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;the
&lt;ol&gt;
&lt;li&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200727145616.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200727145850.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200727145905.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&#34;https://www.zhihu.com/question/21874816/answer/181864044&#34;&gt;❗️如何理解特征值的“吸引”作用&lt;/a&gt;](https://www.zhihu.com/question/21874816/answer/181864044)&lt;/p&gt;
&lt;h1 id=&#34;trace&#34;&gt;Trace&lt;/h1&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;Tr&lt;/mtext&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo&gt;∑&lt;/mo&gt;&lt;mi&gt;λ&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\text{Tr}(A) = \sum\lambda
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;Tr&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1.6000100000000002em;vertical-align:-0.55001em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mop op-symbol large-op&#34; style=&#34;position:relative;top:-0.000004999999999977245em;&#34;&gt;∑&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;λ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∣&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∣&lt;/mi&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∣&lt;/mi&gt;&lt;msub&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∣&lt;/mi&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msqrt&gt;&lt;mrow&gt;&lt;mtext&gt;Tr&lt;/mtext&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;msup&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;/msup&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/msqrt&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;||A||_{F} = \sqrt{\text{Tr}(AA^{T})}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;∣&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;∣&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;∣&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord&#34;&gt;∣&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.32833099999999993em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34; style=&#34;margin-right:0.13889em;&#34;&gt;F&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.15em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1.84em;vertical-align:-0.5474595em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord sqrt&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.2925405em;&#34;&gt;&lt;span class=&#34;svg-align&#34; style=&#34;top:-3.8em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.8em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34; style=&#34;padding-left:1em;&#34;&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;Tr&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.767331em;&#34;&gt;&lt;span style=&#34;top:-2.9890000000000003em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34; style=&#34;margin-right:0.13889em;&#34;&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-3.2525405em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.8em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;hide-tail&#34; style=&#34;min-width:1.02em;height:1.8800000000000001em;&#34;&gt;&lt;svg width=&#39;400em&#39; height=&#39;1.8800000000000001em&#39; viewBox=&#39;0 0 400000 1944&#39; preserveAspectRatio=&#39;xMinYMin slice&#39;&gt;&lt;path d=&#39;M1001,80H400000v40H1013.1s-83.4,268,-264.1,840c-180.7,
572,-277,876.3,-289,913c-4.7,4.7,-12.7,7,-24,7s-12,0,-12,0c-1.3,-3.3,-3.7,-11.7,
-7,-25c-35.3,-125.3,-106.7,-373.3,-214,-744c-10,12,-21,25,-33,39s-32,39,-32,39
c-6,-5.3,-15,-14,-27,-26s25,-30,25,-30c26.7,-32.7,52,-63,76,-91s52,-60,52,-60
s208,722,208,722c56,-175.3,126.3,-397.3,211,-666c84.7,-268.7,153.8,-488.2,207.5,
-658.5c53.7,-170.3,84.5,-266.8,92.5,-289.5c4,-6.7,10,-10,18,-10z
M1001 80H400000v40H1013z&#39;/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.5474595em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;20&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200729181030.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h1 id=&#34;decompositions&#34;&gt;Decompositions&lt;/h1&gt;
&lt;h2 id=&#34;eigen-decomposition-diagonalization&#34;&gt;Eigen Decomposition / Diagonalization&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;矩阵的对角化不唯一&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;也可以作“特征基变换”理解&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;对于一个矩阵 &lt;code&gt;A&lt;/code&gt; ，取特征向量，作为desired basis&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;21&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200627224841.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h4 id=&#34;相似对角化的充要条件&#34;&gt;相似对角化的充要条件&lt;/h4&gt;
&lt;p&gt;n阶矩阵 &lt;code&gt;A&lt;/code&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;有n个线性无关的特征向量&lt;/li&gt;
&lt;li&gt;每个 &lt;code&gt;k&lt;/code&gt;重特征值都有&lt;code&gt;k&lt;/code&gt;个线性无关的特征向量&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;相似对角化的充分条件&#34;&gt;相似对角化的充分条件&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;A有n个不同的特征值&lt;/li&gt;
&lt;li&gt;A是实对称矩阵&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;positive-definite-正定&#34;&gt;Positive definite (正定)&lt;/h3&gt;
&lt;p&gt;正定矩阵的概念来源于二次型&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;λ&lt;/mi&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mtext&gt;can guarantee that &lt;/mtext&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∀&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;msup&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;/msup&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;&amp;gt;&lt;/mo&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\lambda&amp;gt;0\\
\text{can guarantee that }
\\
\forall x  \ x^{T}Ax&amp;gt;0
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.73354em;vertical-align:-0.0391em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;λ&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.64444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8888799999999999em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;can guarantee that &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.9304309999999999em;vertical-align:-0.0391em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;∀&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.8913309999999999em;&#34;&gt;&lt;span style=&#34;top:-3.113em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34; style=&#34;margin-right:0.13889em;&#34;&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.64444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;实对称矩阵的特点&#34;&gt;实对称矩阵的特点&lt;/h3&gt;
&lt;p&gt;1.实对称矩阵A的不同特征值对应的特征向量是&lt;strong&gt;正交&lt;/strong&gt;的（可以进行谱分解）&lt;/p&gt;
&lt;p&gt;2.实对称矩阵A的特征值都是&lt;strong&gt;实数&lt;/strong&gt;，特征向量都是&lt;strong&gt;实向量&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;3.n阶实对称矩阵A必可对角化，且相似对角阵上的元素即为矩阵本身&lt;strong&gt;特征值&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;4.若λ具有k重特征值　必有k个线性无关的特征向量，或者说必有秩r(λ0E-A)=n-k，其中E为单位矩阵。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;实对称矩阵是正定矩阵的充分必要条件是它的所有特征值都大于0&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;singular-value-decomposition-svd&#34;&gt;Singular Value Decomposition (SVD)&lt;/h2&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;22&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200701113808.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h3 id=&#34;requirements&#34;&gt;requirements&lt;/h3&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi&gt;V&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mtext&gt;svd&lt;/mtext&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;msub&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;U&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;S&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;msubsup&gt;&lt;mi&gt;V&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;T&lt;/mi&gt;&lt;/msubsup&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;[U,S,V] = \text{svd}(A) \\
A_{m\times n} = U_{m\times m}S_{m\times n}V_{n\times n}^{T}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.10903em;&#34;&gt;U&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.05764em;&#34;&gt;S&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.22222em;&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;svd&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.891661em;vertical-align:-0.208331em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.25833100000000003em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:0em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;mbin mtight&#34;&gt;×&lt;/span&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.208331em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1.196662em;vertical-align:-0.305331em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.10903em;&#34;&gt;U&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.25833100000000003em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:-0.10903em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;mbin mtight&#34;&gt;×&lt;/span&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;m&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.208331em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.05764em;&#34;&gt;S&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.25833100000000003em;&#34;&gt;&lt;span style=&#34;top:-2.5500000000000003em;margin-left:-0.05764em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;mbin mtight&#34;&gt;×&lt;/span&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.208331em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.22222em;&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;msupsub&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.891331em;&#34;&gt;&lt;span style=&#34;top:-2.4530000000000003em;margin-left:-0.22222em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;mbin mtight&#34;&gt;×&lt;/span&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-3.1130000000000004em;margin-right:0.05em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34; style=&#34;margin-right:0.13889em;&#34;&gt;T&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.305331em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200728174605.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;sup class=&#34;footnote-ref&#34;&gt;&lt;a href=&#34;#fn1&#34; id=&#34;fnref1&#34;&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h3 id=&#34;geometry&#34;&gt;&lt;a href=&#34;https://www.cs.utah.edu/~jeffp/teaching/cs5955/L15-SVD.pdf&#34;&gt;Geometry&lt;/a&gt;&lt;/h3&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;23&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200728182750.png&#34; alt=&#34;wiki&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;ol&gt;
&lt;li&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200728183115.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200728183228.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200728184300.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;applicationprinciple-component-analysispca&#34;&gt;Application:Principle Component Analysis(PCA)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;一种线性、全局、非监督降维方法，基于&lt;strong&gt;特征值分解&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;最小化&lt;strong&gt;初始点&lt;/strong&gt;（中心化之后）和映射到新维度的&lt;strong&gt;新坐标点&lt;/strong&gt;的距离平方之和&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;PCA can be perceived as a task of ﬁnd some encoding function that produces the code&lt;br&gt;
for an input, f(x) = c, and a decoding function that produces the reconstructed&lt;br&gt;
input given its code, x ≈ g(f (x)).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200729162958.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;sup class=&#34;footnote-ref&#34;&gt;&lt;a href=&#34;#fn1&#34; id=&#34;fnref1:1&#34;&gt;[1:1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;类似的还有 LCA（有监督降维方法）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;27&#34;&gt;&lt;img src=&#34;https://pic1.zhimg.com/50/v2-6076240315967ba679091d11e7d20416_hd.webp?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&#34;https://www.zhihu.com/question/41120789?sort=created&#34;&gt;zhihu&lt;/a&gt;&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;28&#34;&gt;&lt;img src=&#34;https://pic3.zhimg.com/50/v2-89d7327bd92119c2c99357a423d4da26_hd.webp?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h2 id=&#34;spectral-decomposition谱分解&#34;&gt;Spectral Decomposition(谱分解)&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://cseweb.ucsd.edu/~dasgupta/291-unsup/lec7.pdf&#34;&gt;pdf ref- ucsd&lt;/a&gt;&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;29&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200729185533.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h1 id=&#34;spaces-空间&#34;&gt;Spaces 空间&lt;/h1&gt;
&lt;p&gt;希尔伯特空间、内积空间的定义有什么关系和区别？ - 李狗嗨的回答 - 知乎&lt;br&gt;
https://www.zhihu.com/question/332144499/answer/731866608&lt;/p&gt;
&lt;h2 id=&#34;metric-space-度量空间&#34;&gt;Metric Space 度量空间&lt;/h2&gt;
&lt;p&gt;定义了抽象距离的空间称作度量空间&lt;/p&gt;
&lt;p&gt;一个度量 d满足&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;正定性&lt;/strong&gt;： &lt;img src=&#34;https://www.zhihu.com/equation?tex=d%28x%2Cy%29+%E2%89%A50&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; ，且 &lt;img src=&#34;https://www.zhihu.com/equation?tex=d%28x%2Cy%29%3D0&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; 当且仅当 &lt;img src=&#34;https://www.zhihu.com/equation?tex=x%3Dy&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; 成立;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对称性&lt;/strong&gt;： &lt;img src=&#34;https://www.zhihu.com/equation?tex=d%28x%2Cy%29%3Dd%28y%2Cx%29&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;三角不等式&lt;/strong&gt;： &lt;img src=&#34;https://www.zhihu.com/equation?tex=d%28x%2Cy%29+%E2%89%A4d%28x%2Cz%29%2Bd%28z%2Cy%29&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; .&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;vector-space-向量空间&#34;&gt;Vector Space 向量空间&lt;/h2&gt;
&lt;p&gt;八大定律&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.math.ucla.edu/~tao/resource/general/121.1.00s/vector_axioms.html&#34;&gt;Don&#39;t take these axioms too seriously!  Math is not about axioms, despite what some people say.  Axioms are one way to think precisely, but they are not the only way, and they are certainly not always the best way.  Also, there are a number of ways to phrase these axioms, and different books will do this differently, but they are all equivalent (unless the book author was really sloppy).&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;30&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200628121229.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;向量空间的定义中并不包含向量与向量之间的乘法。而这也是正是&lt;strong&gt;内积&lt;/strong&gt;作为区别&lt;strong&gt;内积空间&lt;/strong&gt;与一般&lt;strong&gt;向量空间&lt;/strong&gt;的附加条件的原因。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;向量空间和度量空间的区别&#34;&gt;向量空间和度量空间的区别&lt;/h2&gt;
&lt;p&gt;向量空间是赋予代数结构，度量空间是赋予拓扑结构。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;向量空间&lt;/strong&gt;（&lt;a href=&#34;https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Vector_space&#34;&gt;vector space&lt;/a&gt;）的定义包含五个要素：集合 &lt;img src=&#34;https://www.zhihu.com/equation?tex=V&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; ，域 &lt;img src=&#34;https://www.zhihu.com/equation?tex=F&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; ，向量加法 &lt;img src=&#34;https://www.zhihu.com/equation?tex=%7B%5Ccolor%7Bblue%7D%7B%2B%7D%7D%3AV%5Ctimes+V%5Cto+V&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; ，数量乘法 &lt;img src=&#34;https://www.zhihu.com/equation?tex=%7B%5Ccolor%7Bblue%7D%5Ccdot%7D%3A+F%5Ctimes+V%5Cto+V&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; ，还有 &lt;img src=&#34;https://www.zhihu.com/equation?tex=%28V%2CF%2C%2B%2C%5Ccdot%29&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; 满足的八条公理。这个定义里的要素跟「拓扑」，「度量」，「范数」，「内积」都没有关系。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;度量空间&lt;/strong&gt;（&lt;a href=&#34;https://link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Metric_space&#34;&gt;metric space&lt;/a&gt;）的定义包含两个要素：集合 &lt;img src=&#34;https://www.zhihu.com/equation?tex=V&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; ，度量函数 &lt;img src=&#34;https://www.zhihu.com/equation?tex=d%EF%BC%9AV%5Ctimes+V%5Cto%5Cmathbb%7BR%7D&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; 。这个定义里， &lt;img src=&#34;https://www.zhihu.com/equation?tex=V&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; 不需要有线性结构。在一般的度量空间里， &lt;img src=&#34;https://www.zhihu.com/equation?tex=x%2By&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; 这样的表达式没有意义。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;normed-linear-space-赋范线性空间&#34;&gt;Normed (Linear) Space 赋范（线性）空间&lt;/h2&gt;
&lt;p&gt;定义了向量的大小：&lt;strong&gt;范数&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;范数&lt;/strong&gt;常常被用来度量某个向量空间（或矩阵）中的每个向量的长度或大小。其定义是：&lt;/p&gt;
&lt;p&gt;设 &lt;img src=&#34;https://www.zhihu.com/equation?tex=%7B%5Cmathbb+%7BV%7D+%7D+&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; 是布于一个域 &lt;img src=&#34;https://www.zhihu.com/equation?tex=%7B%5Cdisplaystyle+%5Cmathbb+%7BF%7D+%7D&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; （例如，实数域 &lt;img src=&#34;https://www.zhihu.com/equation?tex=+%7B%5Cdisplaystyle+%5Cmathbb+%7BR%7D+%7D+&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt;、复数域 &lt;img src=&#34;https://www.zhihu.com/equation?tex=+%7B%5Cdisplaystyle+%5Cmathbb+%7BC%7D+%7D+&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; ）的向量空间，函数 &lt;img src=&#34;https://www.zhihu.com/equation?tex=%5Cleft%5C%7C++%5Ccdot++%5Cright%5C%7C&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; 作用于&lt;img src=&#34;https://www.zhihu.com/equation?tex=%7B%5Cmathbb+%7BV%7D+%7D+&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt;，且满足条件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;正定性：对 &lt;img src=&#34;https://www.zhihu.com/equation?tex=%5Cforall+%5Cbar%7Bx%7D+%5Cin+%7B+%5Cmathbb+V%7D+%2C%5Cleft%5C%7C+%5Cbar%7Bx%7D+%5Cright%5C%7C+%5Cge+0&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; ；且 &lt;img src=&#34;https://www.zhihu.com/equation?tex=%5Cleft%5C%7C+%5Cbar%7Bx%7D+%5Cright%5C%7C+%3D+0&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; 当且仅当&lt;img src=&#34;https://www.zhihu.com/equation?tex=%5Cbar%7Bx%7D%3D0&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt;；&lt;/li&gt;
&lt;li&gt;齐次性：对&lt;img src=&#34;https://www.zhihu.com/equation?tex=%5Cforall+%5Cbar%7Bx%7D+%5Cin+%7B+%5Cmathbb+V%7D%2C+%5Calpha%5Cin+%7B+%5Cmathbb+F%7D&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt;，有 &lt;img src=&#34;https://www.zhihu.com/equation?tex=%5Cleft%5C%7C+%5Calpha%5Cbar%7Bx%7D+%5Cright%5C%7C+%3D%5Cleft%5C%7C+%5Calpha%5Cright%5C%7C%5Cleft%5C%7C+%5Cbar%7Bx%7D+%5Cright%5C%7C&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; ;&lt;/li&gt;
&lt;li&gt;三角不等式：对 &lt;img src=&#34;https://www.zhihu.com/equation?tex=%5Cforall+%5Cbar%7Bx%7D%2C%5Cbar%7By%7D+%5Cin+%7B+%5Cmathbb+V%7D&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; ，有 &lt;img src=&#34;https://www.zhihu.com/equation?tex=%5Cleft%5C%7C+%5Cbar%7Bx%7D%2B+%5Cbar%7By%7D%5Cright%5C%7C%5Cleq+%5Cleft%5C%7C+%5Cbar%7Bx%7D%5Cright%5C%7C%2B%5Cleft%5C%7C+%5Cbar%7By%7D%5Cright%5C%7C&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt; 。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;inner-product-space-内积空间&#34;&gt;Inner Product Space 内积空间&lt;/h2&gt;
&lt;p&gt;向量空间添加了新的运算：&lt;strong&gt;内积&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;内积空间具有基于空间本身的内积所自然定义的范数， &lt;img src=&#34;https://www.zhihu.com/equation?tex=%5Cleft%5C%7C+x%5Cright%5C%7C%3D%5Csqrt%7B%3Cx%2Cx%3E%7D&#34; alt=&#34;[公式]&#34; loading=&#34;lazy&#34;&gt;，且其满足平行四边形定理，也就是说内积可以诱导一个范数，所以&lt;strong&gt;内积空间一定是“赋范空间”&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;内积将&lt;strong&gt;一对向量&lt;/strong&gt;与&lt;strong&gt;一个纯量&lt;/strong&gt;连接起来，允许我们严格地谈论向量的“夹角”和“长度”，并进一步谈论向量的正交性。&lt;/p&gt;
&lt;hr class=&#34;footnotes-sep&#34;&gt;
&lt;section class=&#34;footnotes&#34;&gt;
&lt;ol class=&#34;footnotes-list&#34;&gt;
&lt;li id=&#34;fn1&#34; class=&#34;footnote-item&#34;&gt;&lt;p&gt;Ian GoodFellow et al., Deep Learning, MIT &lt;a href=&#34;./src/mitdeeplearning.pdf&#34;&gt;the e-Book from GitHub&lt;/a&gt; &lt;a href=&#34;#fnref1&#34; class=&#34;footnote-backref&#34;&gt;↩︎&lt;/a&gt; &lt;a href=&#34;#fnref1:1&#34; class=&#34;footnote-backref&#34;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
">Linear Algebra 线性代数</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/hong-lou-meng-du-hou-gan/"" data-c="
          &lt;p&gt;林妹妹、宝二爷、宝姐姐、凤姐、湘云、贾母、晴雯、袭人、香菱、平儿……每一个活生生的形象 ，背后都是更多的悲欢。&lt;/p&gt;
&lt;p&gt;洋洋洒洒百万字，历经批阅十余载，承载了太丰富的内容。情情的黛玉，情不情的宝玉，直率的凤姐、探丫头、晴雯……大观园里无数是非，终究难论对错。封建的纲常，必然扼杀太多。宝黛是极幸运的，却又是极不幸的。今日的自由，想必是红楼梦中人所向往的吧。&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;“我为的是我的心”“我也为的是我的心”&lt;/p&gt;
&lt;p&gt;为我们拥有如此伟大的作品而自豪！谨向曹公，也向所有87版红楼梦电视剧创作人员致敬！&lt;/p&gt;
&lt;h2 id=&#34;87版红楼梦&#34;&gt;87版红楼梦&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;《红楼梦》就是中国人心尖儿上的宝贝。将来的人还可以把《红楼梦》再重拍一百次、一千次，还可以再拍一百年、一千年，总会有人超越前人。我们的责任就是用自己的才华、努力和心血，筑起一道《红楼梦》的高墙，让后来的人超越时，知道没那么容易。&lt;/p&gt;
&lt;p&gt;作曲家 王立平&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;哎呀我来迟了，不曾迎接远客&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div style=&#34;position: relative; padding: 30% 45%;&#34;&gt;
&lt;iframe style=&#34;position: absolute; width: 100%; height: 100%; left: 0; top: 0;&#34; src=&#34;https://player.bilibili.com/player.html?aid=58979584&amp;bvid=BV1et411L7t7&amp;cid=102807096&amp;page=1&amp;as_wide=1&amp;high_quality=1&amp;danmaku=0&#34; frameborder=&#34;no&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;1&#34;&gt;&lt;img src=&#34;https://timgsa.baidu.com/timg?image&amp;amp;quality=80&amp;amp;size=b9999_10000&amp;amp;sec=1596460789995&amp;amp;di=e64ff892e19790268b686b4e59611f1d&amp;amp;imgtype=0&amp;amp;src=http%3A%2F%2Fimgsrc.baidu.com%2Fbaike%2Fpic%2Fitem%2F54fbb2fb43166d22779cd2c8482309f79152d287.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;2&#34;&gt;&lt;img src=&#34;https://pic.rmb.bdstatic.com/964731f7f41dc916aadc1942d3fec78c.jpeg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;3&#34;&gt;&lt;img src=&#34;https://pic3.zhimg.com/80/v2-090793464a243c9b40cfba8d43ed205f_1440w.jpg?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;共读西厢&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;4&#34;&gt;&lt;img src=&#34;C:/Users/Frank/Desktop/1.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;5&#34;&gt;&lt;img src=&#34;https://pic3.zhimg.com/80/v2-f396ccf632316b1af08d5c2d5e086f9e_1440w.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;6&#34;&gt;&lt;img src=&#34;https://mmbiz.qpic.cn/mmbiz_jpg/h7WRKjNkDuTeviardgJ7IU2Ou5MnZiat430aHAQjJibA9BoVWmme3nKD4PpCMuxYRdSmIroxPcqxHVmmiaib4T0n9rg/640?wx_fmt=jpeg&amp;amp;tp=webp&amp;amp;wxfrom=5&amp;amp;wx_lazy=1&amp;amp;wx_co=1&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;7&#34;&gt;&lt;img src=&#34;https://pic1.zhimg.com/80/v2-f0e8fb086cb89c669e3d3dbdcd3e3a40_1440w.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;8&#34;&gt;&lt;img src=&#34;https://pic1.zhimg.com/80/v2-3f8d8a098548a930304c51e036e18168_1440w.jpg?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;9&#34;&gt;&lt;img src=&#34;https://pic4.zhimg.com/80/v2-9db6355d8609866031495290d23dfcce_1440w.jpg?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;真真这个颦丫头的一张 嘴,叫人恨又不是,喜欢又不是。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;10&#34;&gt;&lt;img src=&#34;https://pic2.zhimg.com/80/v2-17c1991a557d5d04f3469c0c0e9f4621_1440w.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;11&#34;&gt;&lt;img src=&#34;https://pic4.zhimg.com/80/v2-c1c366e935d0f4597f00255367433b47_1440w.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;12&#34;&gt;&lt;img src=&#34;https://pic4.zhimg.com/80/v2-567fb65048e051614673e3232e265aec_1440w.jpg?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;13&#34;&gt;&lt;img src=&#34;https://pic4.zhimg.com/80/v2-13b044ca74e1c8f11d0d7073b8c3cb6b_1440w.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;14&#34;&gt;&lt;img src=&#34;https://pic4.zhimg.com/80/v2-628a81f83cb695dda258fba0cd19f5ca_1440w.jpg?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;div style=&#34;position: relative; padding: 30% 45%;&#34;&gt;
&lt;iframe style=&#34;position: absolute; width: 100%; height: 100%; left: 0; top: 0;&#34; src=&#34;https://player.bilibili.com/player.html?aid=56251861&amp;bvid=BV1V441137ME&amp;cid=98314692&amp;page=1&amp;as_wide=1&amp;high_quality=1&amp;danmaku=0&#34; frameborder=&#34;no&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;15&#34;&gt;&lt;img src=&#34;https://pic4.zhimg.com/80/v2-1a4de625eecc6a3abe467f9b7f9ea4ff_1440w.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;16&#34;&gt;&lt;img src=&#34;https://pic1.zhimg.com/80/v2-f0057126daede1d871b27ecdc9949f4c_1440w.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;17&#34;&gt;&lt;img src=&#34;https://pic4.zhimg.com/80/v2-bface1623b312d764962587d494d035b_1440w.jpg?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;div style=&#34;position: relative; padding: 30% 45%;&#34;&gt;
&lt;iframe style=&#34;position: absolute; width: 100%; height: 100%; left: 0; top: 0;&#34; src=&#34;https://player.bilibili.com/player.html?aid=582756950&amp;bvid=BV1x64y1T7tA&amp;cid=179051678&amp;page=1&amp;as_wide=1&amp;high_quality=1&amp;danmaku=0&#34; frameborder=&#34;no&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;18&#34;&gt;&lt;img src=&#34;https://pic2.zhimg.com/v2-7a8acf9f820c626b65d769a58383d0e6_r.jpg?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;19&#34;&gt;&lt;img src=&#34;https://pic2.zhimg.com/80/v2-5172583b974688f22479bd9fa3986209_1440w.jpg?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;琉璃世界白雪红梅&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;20&#34;&gt;&lt;img src=&#34;https://pic2.zhimg.com/80/v2-1bc2eb66189a80755ca409ada8d018c5_1440w.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;晴雯撕扇&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;21&#34;&gt;&lt;img src=&#34;https://pic3.zhimg.com/v2-0a06c5f869f0daf682688ac8f8dc6284_b.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;22&#34;&gt;&lt;img src=&#34;https://pic4.zhimg.com/80/v2-9037505fbd9010db0daa10cc91141e57_1440w.jpg?source=1940ef5c&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;香菱学诗&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;23&#34;&gt;&lt;img src=&#34;https://timgsa.baidu.com/timg?image&amp;amp;quality=80&amp;amp;size=b9999_10000&amp;amp;sec=1596468982202&amp;amp;di=b6da53ccf561c71c973f6f52b37f66fc&amp;amp;imgtype=0&amp;amp;src=http%3A%2F%2Fp2.ssl.cdn.btime.com%2Ft0133d8fcc66eebc1b3.jpg%3Fsize%3D640x483&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;真的有太多太多经典的情节~&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;24&#34;&gt;&lt;img src=&#34;https://pic2.zhimg.com/80/v2-ea81ea6bdc0e06731abd845e1c52ce2d_1440w.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;blockquote&gt;
&lt;p&gt;大观园也有最美好的时候&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;25&#34;&gt;&lt;img src=&#34;https://pic1.zhimg.com/80/v2-49f7f23939990f1b5ae00c99a5ae2bd0_1440w.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;26&#34;&gt;&lt;img src=&#34;https://timgsa.baidu.com/timg?image&amp;amp;quality=80&amp;amp;size=b9999_10000&amp;amp;sec=1596470611509&amp;amp;di=db681606835c42c729d9cf3df6b00374&amp;amp;imgtype=0&amp;amp;src=http%3A%2F%2Fi0.hdslb.com%2Fbfs%2Farticle%2F0060a2ea9b2bc70a2e1a380d7f6132bc4b95a351.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;87版《红楼梦》珍贵影像丨李耀宗 - 黄怡猫的文章 - 知乎&lt;br&gt;
https://zhuanlan.zhihu.com/p/33556811&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;谨向曹公，向《红楼梦》电视剧的所有创作人员致敬！&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
">红楼梦 读后感</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/dsa-2020-7/"" data-c="
          &lt;blockquote&gt;
&lt;p&gt;若有恒，何必三更眠五更起；&lt;/p&gt;
&lt;p&gt;最无益，莫过一日曝十日寒。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- more --&gt;
&lt;h1 id=&#34;725&#34;&gt;7.25&lt;/h1&gt;
&lt;h2 id=&#34;分割数组的最大值&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/split-array-largest-sum/&#34;&gt;分割数组的最大值&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;区间dp&#34;&gt;区间dp&lt;/h3&gt;
&lt;p&gt;最大值可以方便的转移，所以可以直接应用区间dp&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;为什么这里的状态转移不一样？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;对比最经典的区间dp 题目 &lt;a href=&#34;https://loj.ac/problem/10147&#34;&gt;石子合并&lt;/a&gt;&lt;/p&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;l&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;munder&gt;&lt;mi&gt;max&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;∈&lt;/mo&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;/munder&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;munderover&gt;&lt;mo&gt;∑&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;/munderover&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;&amp;lt;&lt;/mo&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;mo&gt;≤&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;j = i+l-1\\
dp[i][j] = \max_{k\in [i,j)}(dp[i][k]+dp[k+1][j] +\sum_{t = i}^{j}a[t])\\
0\leq i \lt j \leq 2n
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.85396em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.05724em;&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.74285em;vertical-align:-0.08333em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.77777em;vertical-align:-0.08333em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.01968em;&#34;&gt;l&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;−&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.64444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.05724em;&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1.716em;vertical-align:-0.966em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mop op-limits&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.43055999999999994em;&#34;&gt;&lt;span style=&#34;top:-2.009em;margin-left:0em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34; style=&#34;margin-right:0.03148em;&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;mrel mtight&#34;&gt;∈&lt;/span&gt;&lt;span class=&#34;mopen mtight&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mpunct mtight&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mord mathdefault mtight&#34; style=&#34;margin-right:0.05724em;&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;mclose mtight&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-2.7em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:2.7em;&#34;&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#34;mop&#34;&gt;max&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:0.966em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03148em;&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03148em;&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.05724em;&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:3.1364460000000003em;vertical-align:-1.277669em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mop op-limits&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.8587770000000003em;&#34;&gt;&lt;span style=&#34;top:-1.872331em;margin-left:0em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;mrel mtight&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-3.050005em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#34;mop op-symbol large-op&#34;&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-4.347113em;margin-left:0em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34; style=&#34;margin-right:0.05724em;&#34;&gt;j&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.277669em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.78041em;vertical-align:-0.13597em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;≤&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.69862em;vertical-align:-0.0391em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.85396em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.05724em;&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;≤&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.64444em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;dp[i][j]&lt;/code&gt;状态定义不同
&lt;ol&gt;
&lt;li&gt;合并石子：区间性质&lt;/li&gt;
&lt;li&gt;分割数组：单侧区间，实际上直接枚举了区间长度&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;转移&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;min&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;mi&gt;max&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;j&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo separator=&#34;true&#34;&gt;,&lt;/mo&gt;&lt;munderover&gt;&lt;mo&gt;∑&lt;/mo&gt;&lt;mrow&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;k&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;mi&gt;i&lt;/mi&gt;&lt;/munderover&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mo&gt;[&lt;/mo&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo&gt;]&lt;/mo&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;dp[i][j] = \min(dp[i][j],\max(dp[k][j-1],\sum_{t =k+1}^{i}a[t]))
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.05724em;&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mop&#34;&gt;min&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.05724em;&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mop&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.03148em;&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.05724em;&#34;&gt;j&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mbin&#34;&gt;−&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2222222222222222em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:3.1721130000000004em;vertical-align:-1.360444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mpunct&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mop op-limits&#34;&gt;&lt;span class=&#34;vlist-t vlist-t2&#34;&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.8116690000000002em;&#34;&gt;&lt;span style=&#34;top:-1.8478869999999998em;margin-left:0em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;mrel mtight&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mord mathdefault mtight&#34; style=&#34;margin-right:0.03148em;&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;mbin mtight&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mord mtight&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-3.0500049999999996em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span&gt;&lt;span class=&#34;mop op-symbol large-op&#34;&gt;∑&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;top:-4.300005em;margin-left:0em;&#34;&gt;&lt;span class=&#34;pstrut&#34; style=&#34;height:3.05em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;sizing reset-size6 size3 mtight&#34;&gt;&lt;span class=&#34;mord mtight&#34;&gt;&lt;span class=&#34;mord mathdefault mtight&#34;&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-s&#34;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;vlist-r&#34;&gt;&lt;span class=&#34;vlist&#34; style=&#34;height:1.360444em;&#34;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.16666666666666666em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;class Solution {
public:
    int splitArray(vector&amp;lt;int&amp;gt;&amp;amp; nums, int m) {
        int n = nums.size();
        long long MAX = LLONG_MAX;
        vector&amp;lt;vector&amp;lt;long long&amp;gt; &amp;gt; dp(n+1,vector&amp;lt;long long&amp;gt;(n+1,MAX));
        vector&amp;lt;long long&amp;gt; sum(n+1,0);
        for(int i = 0;i&amp;lt;n;i++){
            sum[i+1] = sum[i] + nums[i];
        }
        for(int i = 0;i&amp;lt;=n;i++){
            dp[0][i] = MAX;
        }
        dp[0][0] = 0;
        for(int i = 1;i&amp;lt;=n;i++){
            for(int j = 1;j&amp;lt;=min(i,m);j++){
                for(int k = 0;k&amp;lt;i;k++){
                    dp[i][j] = min(dp[i][j],max(dp[k][j-1],sum[i]-sum[k]));
                }
            }
        }
        return (int)dp[n][m];
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;为什么可以用二分&#34;&gt;为什么可以用二分&lt;/h2&gt;
&lt;p&gt;验证方便（可以直接使用贪心策略）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;分成m段的最大值&lt;/strong&gt;的最小值&lt;/p&gt;
&lt;p class=&#39;katex-block&#39;&gt;&lt;span class=&#34;katex-display&#34;&gt;&lt;span class=&#34;katex&#34;&gt;&lt;span class=&#34;katex-mathml&#34;&gt;&lt;math&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;given &lt;/mtext&gt;&lt;mi&gt;m&lt;/mi&gt;&lt;mspace linebreak=&#34;newline&#34;&gt;&lt;/mspace&gt;&lt;mi&gt;a&lt;/mi&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;min&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi&gt;max&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mi mathvariant=&#34;normal&#34;&gt;∀&lt;/mi&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mo&gt;(&lt;/mo&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;mo&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&#34;application/x-tex&#34;&gt;\text{given}  \ m
\\ans = \min(\max(\forall f()))
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&#34;katex-html&#34; aria-hidden=&#34;true&#34;&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.8623000000000001em;vertical-align:-0.19444em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord text&#34;&gt;&lt;span class=&#34;mord&#34;&gt;given&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;m&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;mspace newline&#34;&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:0.43056em;vertical-align:0em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mrel&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mspace&#34; style=&#34;margin-right:0.2777777777777778em;&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;base&#34;&gt;&lt;span class=&#34;strut&#34; style=&#34;height:1em;vertical-align:-0.25em;&#34;&gt;&lt;/span&gt;&lt;span class=&#34;mop&#34;&gt;min&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mop&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mord&#34;&gt;∀&lt;/span&gt;&lt;span class=&#34;mord mathdefault&#34; style=&#34;margin-right:0.10764em;&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;mopen&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;mclose&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;-&amp;gt; 优化问题 -&amp;gt; 广义上是一个搜索解的问题，解空间是一定范围内的整数&lt;/p&gt;
&lt;p&gt;🤔这里发现自己真的应该好好学逻辑，这种表示也不知道对不对，好蹩脚啊&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;采用贪心策略，尽可能少分，验证解是否合理(&lt;u&gt;&lt;em&gt;&lt;strong&gt;也就是判断一个解是不是在解空间里面&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;)&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;bool test(vector&amp;lt;int&amp;gt; a,int s,int m){
    int n = a.size();
    int cnt = 0;
    long long sum = 0;
    for(int i = 0;i&amp;lt;n;i++){
        sum += a[i];
        if(sum&amp;gt;s){
            cnt++;sum = a[i];
            if(sum&amp;gt;s)return false;
            continue;
        }
    }
    cnt++;
    return cnt&amp;lt;=m;
}
int splitArray(vector&amp;lt;int&amp;gt;&amp;amp; nums, int m) {
    int n = nums.size();
    long long sum = 0;
    int _max = -1;
    for(int i = 0;i&amp;lt;n;i++){
        sum += nums[i];
        _max = max(_max,nums[i]);
    }
    long long l = _max;
    // long long l = 0;
    long long r = sum;
    long long mid;
    while(l!=r){
        mid = (l+r)/2;
        if(test(nums,mid,m)){
            r = mid;
        }else{
            l = mid + 1;
        }
    }
    return l;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;726&#34;&gt;7.26&lt;/h1&gt;
&lt;h2 id=&#34;矩阵中的最长递增路径&#34;&gt;&lt;a href=&#34;https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/&#34;&gt;矩阵中的最长递增路径&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&#34;dfs-记忆化搜索&#34;&gt;dfs + 记忆化搜索&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;🤔 What about the longest non-decreasing path in a matrix?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;int longestIncreasingPath(vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; matrix) {
    // 注意条件判断！
    int n = max(matrix.size(),matrix[0].size());
    // ...
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;class Solution {
public:
    int di[4] = {1,0,-1,0};
    int dj[4] = {0,1,0,-1};
    int imax;
    int jmax;
    int ans = -7;
    int l = 0;
    bool check(int i,int j){
        return (i&amp;gt;=0&amp;amp;&amp;amp;i&amp;lt;=imax&amp;amp;&amp;amp;j&amp;gt;=0&amp;amp;&amp;amp;j&amp;lt;=jmax);
    }
    int dfs(vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; matrix,vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; ms,
	vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; vis,int i,int j){
        if(ms[i][j]!=-3){
            return ms[i][j];
        }
        else{
            int _ans = 0;
            for(int k = 0;k&amp;lt;4;k++){
                int ii = i+di[k];
                int jj = j+dj[k];
                if(check(ii,jj) &amp;amp;&amp;amp; !vis[ii][jj] &amp;amp;&amp;amp; matrix[ii][jj] &amp;gt; matrix[i][j]){
					vis[ii][jj] = 1;
                    _ans = max(_ans,dfs(matrix,ms,vis,ii,jj)+1);
                    vis[ii][jj] = 0;
                }
            }
            ms[i][j] = _ans;
            return ms[i][j];
        }
    }
    int longestIncreasingPath(vector&amp;lt;vector&amp;lt;int&amp;gt;&amp;gt;&amp;amp; matrix) {
        if(matrix.size() == 0)return 0;
        int n = max(matrix.size(),matrix[0].size());
        vector&amp;lt;vector&amp;lt;int&amp;gt; &amp;gt; ms(n+10,vector&amp;lt;int&amp;gt;(n+10,-3));
        vector&amp;lt;vector&amp;lt;int&amp;gt; &amp;gt; vis(n+10,vector&amp;lt;int&amp;gt;(n+10,0));
        imax = matrix.size()-1;
        jmax = matrix[0].size()-1;
        for(int i = 0;i&amp;lt;matrix.size();i++){
            for(int j = 0;j&amp;lt;matrix[i].size();j++){
                ans = max(ans,dfs(matrix,ms,vis,i,j)+1);
            }
        }
        return ans;
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;基于拓扑排序的动态规划&#34;&gt;基于拓扑排序的动态规划&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;动态规划其实和记忆化搜索是同样的核心思想 &lt;code&gt;最优子结构&lt;/code&gt;&amp;amp;&lt;code&gt;无后效性&lt;/code&gt;&amp;amp;&lt;code&gt;重复子问题&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;只不过记忆化搜索没有显式的状态转移&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;几个思考题比较有趣&#34;&gt;几个思考题比较有趣&lt;/h3&gt;
&lt;p&gt;为了让大家更好地理解这道题，小编出了四道思考题，欢迎感兴趣的同学在评论区互动哦。&lt;/p&gt;
&lt;ul class=&#34;contains-task-list&#34;&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input class=&#34;task-list-item-checkbox&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-9958312&#34;&gt;&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-9958312&#34;&gt; 「方法一」中使用了记忆化存储和深度优先搜索，这里的深度优先搜索可以替换成广度优先搜索吗？&lt;/label&gt;&lt;/li&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input class=&#34;task-list-item-checkbox&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-2591978&#34;&gt;&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-2591978&#34;&gt; 「方法二」中基于拓扑排序对排序后的有向无环图做了层次遍历，如果没有拓扑排序直接进行广度优先搜索会发生什么？&lt;/label&gt;&lt;/li&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input class=&#34;task-list-item-checkbox&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-4369500&#34;&gt;&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-4369500&#34;&gt; 「方法二」中如果不使用拓扑排序，而是直接按照矩阵中元素的值从大到小进行排序，并依此顺序进行状态转移，那么可以得到正确的答案吗？如果是从小到大进行排序呢？&lt;/label&gt;&lt;/li&gt;
&lt;li class=&#34;task-list-item&#34;&gt;&lt;input class=&#34;task-list-item-checkbox&#34; disabled=&#34;&#34; type=&#34;checkbox&#34; id=&#34;task-item-1505209&#34;&gt;&lt;label class=&#34;task-list-item-label&#34; for=&#34;task-item-1505209&#34;&gt; 「变式」给定一个整数矩阵，找出符合以下条件的路径的数量：这个路径是严格递增的，且它的长度至少是 33。矩阵的边长最大为 10^3，答案对 10^9 + 7取模。其他条件和题目相同。思考：是否可以借鉴这道题的方法？&lt;/label&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;727&#34;&gt;7.27&lt;/h1&gt;
&lt;h2 id=&#34;poj-数组抓牛&#34;&gt;&lt;a href=&#34;http://poj.org/problem?id=3278&#34;&gt;POJ 数组抓牛&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;记忆化广度优先搜索&lt;/p&gt;
&lt;p&gt;采用bfs的原因是因为目标就是要找到最优解，这种情况下dfs是没有边界的&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;😂 像这种情况下一定要注意利用短路求值方法，首先判断有没有数组越界&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;🤔 复习一下在编译原理当中短路求值的实现方法&lt;/p&gt;
&lt;p&gt;控制流的实现可以采用回填法&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;if ((a &amp;amp;&amp;amp; b &amp;amp;&amp;amp; c) || d) {
do_something();
}
if (a) {
if (b) {
 if (c) {
   goto then_label;
 } else {
   goto else_label;
 }
} else {
 goto else_label;
}
} else {
else_label:
if (d) {
then_label:
 do_something();
}
}

//作者：RednaxelaFX
//链接：https://www.zhihu.com/question/53273670/answer/134298223
//来源：知乎
//著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;bool check(int ii ){
	return  ii&amp;gt;=0 &amp;amp;&amp;amp; ii&amp;lt;=N &amp;amp;&amp;amp; vis[ii]==-1;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;728&#34;&gt;7.28&lt;/h1&gt;
&lt;h2 id=&#34;friend-chains&#34;&gt;&lt;a href=&#34;https://vjudge.net/problem/HDU-4460&#34;&gt;Friend Chains&lt;/a&gt;&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;邻接表+HashMap&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;// Friend Chians 
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;queue&amp;gt;
#include&amp;lt;string.h&amp;gt;
#include&amp;lt;string&amp;gt; 
#include&amp;lt;algorithm&amp;gt;
#include&amp;lt;iostream&amp;gt;
#include&amp;lt;map&amp;gt;
using namespace std;
const int MAX = 0x3f3f3f3f;
const int N = 1050;
int ans;
int w[N][N];
bool vis[N];
int dis[N][N];
vector&amp;lt;int &amp;gt;e[N];
int n;
map&amp;lt;string, int &amp;gt; m;
string buf;
string buf1,buf2;
void init(){
	for(int i = 0;i&amp;lt;N;i++)vector&amp;lt;int &amp;gt;().swap(e[i]); 
	memset(w,0,sizeof(w));
	memset(dis,0,sizeof(dis));
	ans = -3;
	for(int i = 0;i&amp;lt;N;i++){
		for(int j  =0;j&amp;lt;N;j++){
			dis[i][j] = -3;
		}
	}
}
queue&amp;lt;int &amp;gt;q;
void bfs(int ori){
	memset(vis,0,sizeof(vis));
	queue&amp;lt;int&amp;gt; emp; 
	swap(emp,q);
	dis[ori][ori] = 0;
	vis[ori] = 1;
	// 
	q.push(ori);
	while(!q.empty()){
		int cur = q.front();q.pop();
		for(int i = 0;i&amp;lt;e[cur].size();i++){
			int to = e[cur][i];
			if(dis[ori][to]==-3 &amp;amp;&amp;amp; !vis[to]){
				dis[ori][to] = dis[ori][cur]+1;
				q.push(to);
			}
		}
	}
}
int main(){
	while(1){
		scanf(&amp;quot;%d&amp;quot;,&amp;amp;n);
		init();
		if(n==0) return 0;
		else{
			for(int i = 0;i&amp;lt;n;i++){
				cin &amp;gt;&amp;gt; buf;
				m[buf] = i;
			}
		}
		// 
		int nn;
		scanf(&amp;quot;%d&amp;quot;,&amp;amp;nn);
		for(int i = 0;i&amp;lt;nn;i++){
			cin &amp;gt;&amp;gt;buf1;
			cin &amp;gt;&amp;gt;buf2;
			int u = m[buf1];
			int v = m[buf2];
			e[u].push_back(v);
			e[v].push_back(u);
		} 
		// 输入完成
		for(int i = 0;i&amp;lt;n;i++){
			bfs(i);
		} 
		ans = -MAX;
		bool has = true;
		for(int i = 0;i&amp;lt;n;i++){
			for(int j = 0;j&amp;lt;n;j++){
				if(dis[i][j] ==  -3){
					printf(&amp;quot;-1\n&amp;quot;);
					has = false;
					break;					
				}else{
					ans = max(ans,dis[i][j]);
				}
			}
			if(!has)break;
		} 
		if(!has)continue;
		printf(&amp;quot;%d\n&amp;quot;,ans); 
	} 
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;729&#34;&gt;7.29&lt;/h1&gt;
&lt;h2 id=&#34;pat1018&#34;&gt;&lt;a href=&#34;https://www.cnblogs.com/flightless/p/8525396.html&#34;&gt;PAT1018&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;关键问题是如何评判一条路径，有多个&lt;a href=&#34;https://www.cnblogs.com/VividBinGo/p/12267302.html&#34;&gt;评测尺度&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/bochen-sam/archive/2013/10/07/3355871.html&#34;&gt;题意的理解（后面的车不能用于前面的站点），这篇博客分析的很好&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;😂这篇文章里面有一个神来之笔，想了好久没有头绪&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;所以用sent值来存储collect变化序列中最小的，当sent的值为负时，就代表需要从原点取自行车。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;解决这个问题有一个朴素的思路&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;比如&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;when c/2 = 5&lt;/th&gt;
&lt;th&gt;2&lt;/th&gt;
&lt;th&gt;3&lt;/th&gt;
&lt;th&gt;6&lt;/th&gt;
&lt;th&gt;5&lt;/th&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;th&gt;8&lt;/th&gt;
&lt;th&gt;7&lt;/th&gt;
&lt;th&gt;3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;差值&lt;/td&gt;
&lt;td&gt;-3&lt;/td&gt;
&lt;td&gt;-2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;-4&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;-2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;累计差值&lt;/td&gt;
&lt;td&gt;-3&lt;/td&gt;
&lt;td&gt;-5&lt;/td&gt;
&lt;td&gt;-4&lt;/td&gt;
&lt;td&gt;-4&lt;/td&gt;
&lt;td&gt;-8&lt;/td&gt;
&lt;td&gt;-5&lt;/td&gt;
&lt;td&gt;-3&lt;/td&gt;
&lt;td&gt;-5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;动作&lt;/td&gt;
&lt;td&gt;sent 3&lt;/td&gt;
&lt;td&gt;sent 2&lt;/td&gt;
&lt;td&gt;collect 1&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;sent &lt;br /&gt;4-1 = 3&lt;/td&gt;
&lt;td&gt;collect&lt;/td&gt;
&lt;td&gt;collect&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;位置&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;极小&lt;br /&gt;共&lt;code&gt;sent&lt;/code&gt; 5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;最小&lt;br /&gt;3 = -8-(-5)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;在每一次&lt;code&gt;delta&lt;/code&gt;由负转正的时候，就做一次 &lt;code&gt;collect - need&lt;/code&gt;，如果是复数，那么 &lt;code&gt;sent addtional bikes&lt;/code&gt;，否则从&lt;code&gt;collect&lt;/code&gt;当中拿取。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;🤔这里作者说的累计差值的全局最小就是所需借出的车子是什么意思呢？&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;1&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200730180051.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;凑合看吧 😂&lt;/p&gt;
&lt;p&gt;累计值的意义是 一段时间内&lt;strong&gt;系统&lt;/strong&gt;（好像有点高级hhh）将要向外界序求或者提供的资源。&lt;/p&gt;
&lt;p&gt;最低的累计值意思就是，系统最多向外界需求的资源。&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;2&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200730180537.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;也就是说，当满足最低累计值之后，相当于满足了之前所有的需求（红色箭头），注意这里面存在系统自给自足的部分（累计值上升）。&lt;/p&gt;
&lt;p&gt;也可以这样理解：相当于给系统一个橙色线所示的 &lt;code&gt;势&lt;/code&gt;，满足了系统自给自足的所有需求&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;啊，分析完了其实感觉还是没太分析到点子上&lt;/p&gt;
&lt;p&gt;花了一两个小时啊~感觉效率挺低&lt;/p&gt;
&lt;p&gt;我真的不太清楚原作者是怎么想到用这个指标来度量的~&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.liuchuo.net/archives/2373&#34;&gt;柳婼大神其实是用了dfs 动态建立 temppath 并且模拟决策过程实现的，感觉这个还是现实一点~&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;但是那个&lt;strong&gt;累积最低值还是很神奇啊!&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&#34;730&#34;&gt;7.30&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://www.luogu.com.cn/blog/Nero-Yuzurizaki/chi-qu-fa-xiao-jie&#34;&gt;洛谷日报：尺取法小结&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;也叫双指针法&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;poj-3061&#34;&gt;&lt;a href=&#34;http://poj.org/problem?id=3061&#34;&gt;POJ 3061&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;// POJ 3061
#include&amp;lt;stdio.h&amp;gt;
#include&amp;lt;algorithm&amp;gt;
using namespace std;
typedef long long ll;
const int N = 100000 + 100;
const int MAX = 0x3f3f3f3f;
int n;
int s;
ll sum;
int a[N];
int main(){
	int nn;
	scanf(&amp;quot;%d&amp;quot;,&amp;amp;nn);
	while(nn--){
		scanf(&amp;quot;%d %d&amp;quot;,&amp;amp;n,&amp;amp;s);
		for(int i = 0;i&amp;lt;n;i++){
			scanf(&amp;quot;%d&amp;quot;,&amp;amp;a[i]);
		}
		int l = 0;
		int r = 0;
		int ans = MAX;
		sum = 0;
		while(1){
			while(r&amp;lt;n&amp;amp;&amp;amp;sum&amp;lt;s)sum += a[r++];
			if(sum&amp;lt;s)break;
			ans = min(ans,r-l);
			sum -= a[l++];
			if(l&amp;gt;=n)break;
		}
		if(ans == MAX)printf(&amp;quot;0\n&amp;quot;);
		else printf(&amp;quot;%d\n&amp;quot;,ans); 
	}
	return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&#34;731&#34;&gt;7.31&lt;/h1&gt;
&lt;h2 id=&#34;acm-80days&#34;&gt;&lt;a href=&#34;http://hihocoder.com/contest/acmicpc2018beijingonline/problem/4&#34;&gt;ACM 80Days&lt;/a&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&#34;language-cpp&#34;&gt;// 80 Days 
#include&amp;lt;stdio.h&amp;gt;
typedef long long ll;
const int N = 2000100;
int n;
int c;
int a[N];
int b[N];
int main(){
	int nn;
	scanf(&amp;quot;%d&amp;quot;,&amp;amp;nn);
	while(nn--){
		scanf(&amp;quot;%d %d&amp;quot;,&amp;amp;n,&amp;amp;c);
		ll sum = c;
		for(int i = 0;i&amp;lt;n;i++){
			scanf(&amp;quot;%d&amp;quot;,&amp;amp;a[i]);
		}	
		for(int i = 0;i&amp;lt;n;i++){
			scanf(&amp;quot;%d&amp;quot;,&amp;amp;b[i]);
		}
		for(int i = 0;i&amp;lt;n;i++){
			a[i] = a[i]-b[i];
			a[i+n] = a[i];
		}
		int l = 0;
		int r = 0;
		while(1){
			while(r&amp;lt;2*n &amp;amp;&amp;amp; sum &amp;gt;= 0 &amp;amp;&amp;amp; r-l+1 &amp;lt;= n){
				sum += a[r]; 
				r ++;
			}
			if(sum&amp;gt;=0 &amp;amp;&amp;amp; r-l+1 &amp;gt; n)break;
			while(sum&amp;lt;0 &amp;amp;&amp;amp; l&amp;lt;r &amp;amp;&amp;amp; l&amp;lt;n){
				// 不符合要求
				sum -= a[l];
				l ++;
			}
			if(l&amp;gt;=n)break;
		} 
		if(l&amp;gt;=n)printf(&amp;quot;-1\n&amp;quot;);
		else printf(&amp;quot;%d\n&amp;quot;,l+1);
	} 
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;两道尺取的题目分析一下&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如何获得区间
&lt;ul&gt;
&lt;li&gt;POJ 3061 要求的是最短区间长度，靠的区间右侧尽可能扩展，然后左侧收缩的方法&lt;/li&gt;
&lt;li&gt;80 Days 因为需要最左侧的可行区间，所有右边界不需要扩展的过大，只需要移动到构成长度为&lt;code&gt;n&lt;/code&gt;的区间就可以了&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;不同的题目需要考虑不同的区间生成策略&lt;/li&gt;
&lt;/ul&gt;
">DSA 2020-7</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/xiao-lu/"" data-c="
          &lt;p&gt;能半个小时完成的任务，就不要拖到一个小时 ！&lt;/p&gt;
&lt;!-- more --&gt;
">Get your Job DONE！摒弃完美主义💪</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/cai-yong-gitee-pages-gridea-pi-chu-li-da-jian-ge-ren-zhu-ye-win10/"" data-c="
          &lt;p&gt;&lt;strong&gt;这样就可以啦！以后发博客只需要两步&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Gridea编辑，预览同步（并不是真正同步，而是编译好静态网页）&lt;/li&gt;
&lt;li&gt;运行批处理文件&lt;/li&gt;
&lt;/ol&gt;
&lt;!-- more --&gt;
&lt;h1 id=&#34;1了解-gridea-的原理&#34;&gt;1.了解 Gridea 的原理&lt;/h1&gt;
&lt;p&gt;Gridea 是优秀的开源静态网页编译器。希望Gridea 越来越好，我们都能享受分享的快乐！&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果打不开 Gridea，可以等一等，可能单纯就是&lt;strong&gt;卡掉了&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;我们主要可以利用相关主题，通过GUI快速进行部署&lt;/p&gt;
&lt;p&gt;更多详细内容请见&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gridea.dev/&#34;&gt;Gridea.dev&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&#34;2注册gitee账号打开gitee-pages&#34;&gt;2.注册Gitee账号，打开Gitee Pages&lt;/h1&gt;
&lt;p&gt;在此不做详述，只需要参考任何一个 Hexo 或者 jekerll + Gitee 的教程即可&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.jianshu.com/p/5014133ba61a&#34;&gt;一个很棒的教程，和Hexo相关的之后我们交给 Gridea&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我们的目的只是用Gridea编译markdown 成为静态网页，并且添加链接等的功能&lt;/p&gt;
&lt;p&gt;至于Git ，我们之后用命令实现&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注册好之后，其实我们并不需要令牌，请保证仓库是公开的，另外注意&lt;code&gt;个人信息安全&lt;/code&gt;&lt;/p&gt;
&lt;h1 id=&#34;3充分利用gridea-特性完成静态网页生成&#34;&gt;3.充分利用Gridea 特性，完成静态网页生成&lt;/h1&gt;
&lt;h2 id=&#34;一个细节问题如何选择主题&#34;&gt;一个细节问题：如何选择主题&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://gridea.dev/themes&#34;&gt;主题在这里下载&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;选择主题之后大家可以自行配置，这并不影响主页的部署/&lt;/p&gt;
&lt;h2 id=&#34;关于服务器设置&#34;&gt;关于服务器设置&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200724161534.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/li&gt;
&lt;li&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200724170100.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;选择Github，可以按照自己的情况进行修改&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;至于为什么这样设置，本人不是特别清楚&lt;/p&gt;
&lt;p&gt;我的想法是尽可能和github 对照着来，因为其实本质上我们都是要利用一个远端仓库，相关链接的作用，好像是体现在超链接上面&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;3&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200724162155.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;这里推荐 VSCode&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;gridea-生成静态网页&#34;&gt;Gridea 生成静态网页&lt;/h2&gt;
&lt;p&gt;编辑好之后如果我们点击了 &lt;code&gt;Test Connection&lt;/code&gt;，肯定是连不上的&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;在这里建议大家不要过多的点击Test Connection，主要尝试 Sync 和 Preview就好，因为Test 貌似会建立一个.git 文件夹&lt;/strong&gt;&lt;br&gt;
如果大家可以连上，那么我的这篇博客也就没什么意义了&lt;br&gt;
希望Gridea 继续加油，早日实现对国内Gitee的支持，coding pages 的Page 域名已经是随机分配的了，所以没有采用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;4&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200724162357.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;5&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200724162329.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;莫慌&lt;/strong&gt;，Preview成功预览之后，点击 Sync&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;6&#34;&gt;&lt;img src=&#34;https://img-blog.csdnimg.cn/20200724170115672.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;报错是正常的，如果连上了，也恭喜你呀哈哈&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;7&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200724162616.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h1 id=&#34;核心经验分享bat-git&#34;&gt;核心经验分享：bat + git&lt;/h1&gt;
&lt;p&gt;这时候，我们可以关掉Gridea了&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;8&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200724162907.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;p&gt;橙色圈出来的是需要涉及到的部分，蓝色的部分是我自己的文件，其他文件应该是相同的&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这里最重要的就是 output文件&lt;/p&gt;
&lt;p&gt;可以打开看一下，里面已经有了.git ，还有很多css + html&lt;/p&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;9&#34;&gt;&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200724163037.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;放弃掉gridea-产生的git用-gitee替换github&#34;&gt;放弃掉Gridea 产生的.git，用 &lt;code&gt;gitee&lt;/code&gt;替换&lt;code&gt;github&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;这样做的主要目的是防止之后需要出现的pull 等操作，否则比较麻烦&lt;/p&gt;
&lt;p&gt;替换的代码可以用任何一种语言。我尝试过bat，但是很奇怪地非常慢……&lt;/p&gt;
&lt;p&gt;这里给出python 代码，遍历所有文件，并且替换字符串，路径设置为对应的 &lt;code&gt;output&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-python&#34;&gt;import os
path = &#39;E:\\gridea_source\\output&#39;
exclude_path = &#39;.git&#39;
ori = &#39;XXX.github.io&#39;
tar = &#39;XXX.gitee.io&#39;


def get_filelist(dir):
    filelist = []
    for home, dirs, files in os.walk(path):
        dirs[:] = [d for d in dirs if not d[0] == &#39;.&#39;]
        print(dirs)
        for filename in files:
            # 文件名列表，包含完整路径
            filelist.append(os.path.join(home, filename))
            # 文件名列表，只包含文件名
        # Filelist.append( filename)
    return filelist


if __name__ == &amp;quot;__main__&amp;quot;:
    filelist = get_filelist(dir)
    print(&amp;quot;#files = &amp;quot;+str(len(filelist)))
    try:
        for file in filelist:
            with open(file, &#39;w+&#39;) as f:
                f.write(f.read().replace(ori, tar))
        input(&amp;quot;OK&amp;quot;)
    except Exception as e:
        print(str(e))
        input(&amp;quot;Error&amp;quot;)
    # 别忘了关闭文件
    f.flush()
    f.close()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后采用 &lt;code&gt;pyinstaller&lt;/code&gt;编译为 exe，方便调用&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;pyinstaller&lt;/code&gt;编译为 exe采用命令 &lt;code&gt;pyinstaller -F replace.py(对应的python文件名)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;编译好之后，其他文件夹删掉就可以，只留下.exe&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;批处理拉取远程仓库更新文件&#34;&gt;批处理拉取远程仓库，更新文件&lt;/h3&gt;
&lt;p&gt;首先，我们在&lt;code&gt;output&lt;/code&gt;同级建立一个 &lt;code&gt;COMMIT&lt;/code&gt; 文件夹&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;cd &amp;quot;./COMMIT&amp;quot;
git init  
git remote add origin https://gitee.com/ZXYFrank/ZXYFrank.git
git fetch  
git reset --hard origin/master  
git branch --set-upstream-to=origin/master master   

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;采用以上命令拉取远程仓库到 &lt;code&gt;COMMIT&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;start &amp;quot;../replace.exe&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后运行一下编译好的exe，换掉含有 github的链接&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;cd &amp;quot;../output&amp;quot;
rd /s/q .git  
cd &amp;quot;..&amp;quot;
xcopy /e/c/h/z/y &amp;quot;./output&amp;quot; &amp;quot;./COMMIT&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;采用删掉output 当中的git文件，（剩下的就是干货了），用 &lt;code&gt;xcopy&lt;/code&gt;复制到&lt;code&gt;COMMIT&lt;/code&gt;里面&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;cd /d &amp;quot;./COMMIT&amp;quot;
rem pushing
git add . 
set /p id= &amp;quot;Enter Message: &amp;quot;
git commit -m &amp;quot;%id%&amp;quot;
git push -u origin master
echo &amp;quot;Don&#39;t forget to deploy!&amp;quot;
pause
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;之后切换到 COMMIT，开始经典commit push 操作&lt;/p&gt;
&lt;p&gt;代码合起来之后，保存成 .bat，之后运行就好&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;cd &amp;quot;./COMMIT&amp;quot;
git init  
git remote add origin https://gitee.com/ZXYFrank/ZXYFrank.git
git fetch  
git reset --hard origin/master  
git branch --set-upstream-to=origin/master master   

start &amp;quot;../replace.exe&amp;quot;
rem delete git

cd &amp;quot;../output&amp;quot;
rd /s/q .git  

cd &amp;quot;..&amp;quot;
xcopy /e/c/h/z/y &amp;quot;./output&amp;quot; &amp;quot;./COMMIT&amp;quot;
cd /d &amp;quot;./COMMIT&amp;quot;
rem pushing
git add . 
set /p id= &amp;quot;Enter Message: &amp;quot;
git commit -m &amp;quot;%id%&amp;quot;
git push -u origin master
echo &amp;quot;Don&#39;t forget to deploy!&amp;quot;
pause
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;一定别忘了部署&#34;&gt;一定别忘了部署！&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;另外提醒大家一下，部署好之后如果效果没有发生变化，可以清空一下浏览器的缓存（尤其是Cookie）&lt;br&gt;
&lt;img src=&#34;https://gitee.com/ZXYFrank/picgo/raw/master/img/20200724164523.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;这样就可以啦！以后发博客只需要两步&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Gridea编辑，预览同步（并不是真正同步，而是编译好静态网页）&lt;/li&gt;
&lt;li&gt;运行批处理文件&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;欢迎大家交流！也希望 Gridea 尽早支持 Gitee，有更多好平台可以供我们使用！&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://zxyfrank.gitee.io/&#34;&gt;欢迎大家来我的博客&lt;/a&gt;&lt;/p&gt;
&lt;h5 id=&#34;references&#34;&gt;references&lt;/h5&gt;
&lt;p&gt;&lt;a href=&#34;https://www.jianshu.com/p/5014133ba61a&#34;&gt;使用Gitee+Hexo搭建个人博客&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/qq_43040688/article/details/106948388?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&amp;amp;depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&#34;&gt;搭建Gridea+gitee+Valine评论+Valine-Admin评论后台的个人博客&lt;/a&gt;&lt;/p&gt;
">采用Gitee Pages + Gridea + 批处理 搭建个人主页(win10)</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/gallery/"" data-c="
          &lt;p&gt;&lt;strong&gt;Welcome！&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&#34;scenery&#34;&gt;Scenery&lt;/h1&gt;
&lt;h2 id=&#34;sea&#34;&gt;Sea&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;背景&lt;br&gt;
Santorini Greece&lt;br&gt;
&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595560441818.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;people&#34;&gt;People&lt;/h1&gt;
&lt;h2 id=&#34;nini&#34;&gt;NiNi&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595560626483.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;br&gt;
&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595560650460.png&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;br&gt;
&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595563500180.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;健哥&#34;&gt;健哥！&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://timgsa.baidu.com/timg?image&amp;amp;quality=80&amp;amp;size=b9999_10000&amp;amp;sec=1595570540610&amp;amp;di=0478c7eb6243dcb4fbd03ca9c9fedb20&amp;amp;imgtype=0&amp;amp;src=http%3A%2F%2Fimg.mp.itc.cn%2Fupload%2F20170424%2Fd6a8e48fc2b34b5faa05a21f870e4846_th.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;br&gt;
&lt;img src=&#34;https://timgsa.baidu.com/timg?image&amp;amp;quality=80&amp;amp;size=b9999_10000&amp;amp;sec=1595570650319&amp;amp;di=4a08bc23685cc7e22b2ece719e9054c6&amp;amp;imgtype=0&amp;amp;src=http%3A%2F%2Fwx3.sinaimg.cn%2Flarge%2F674fc498ly1fveoe98ehxj20u00u016j.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;br&gt;
&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595563176266.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;br&gt;
&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595563626848.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;逃跑&#34;&gt;逃跑&lt;/h2&gt;
&lt;figure data-type=&#34;image&#34; tabindex=&#34;1&#34;&gt;&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595562331366.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/figure&gt;
&lt;h1 id=&#34;scenes&#34;&gt;Scenes&lt;/h1&gt;
&lt;h2 id=&#34;假如爱有天意&#34;&gt;假如爱有天意&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595562587022.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;br&gt;
&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595562070412.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;br&gt;
&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595561310822.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;br&gt;
&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595561709074.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;br&gt;
&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595561419128.gif&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;谁知道爱是什么&lt;br&gt;
短暂的相遇却念念不忘&lt;/p&gt;
&lt;/blockquote&gt;
">Gallery</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/tian-wen/"" data-c="
          &lt;blockquote&gt;
&lt;p&gt;九天之际，安放安属？&lt;br&gt;
隅隈多有，谁知其数？&lt;/p&gt;
&lt;p&gt;《天问》&lt;br&gt;
屈原&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- more --&gt;
&lt;blockquote&gt;
&lt;p&gt;我知道已被忘却&lt;br&gt;
流浪的航程太长太长&lt;br&gt;
但那一时刻要叫我一声啊&lt;br&gt;
当东方再次出现霞光&lt;br&gt;
我知道已被忘却&lt;br&gt;
启航的时代太远太远&lt;br&gt;
但那一时刻要叫我一声啊&lt;br&gt;
当人类又看到了蓝天&lt;br&gt;
我知道已被忘却&lt;br&gt;
太阳系的往事太久太久&lt;br&gt;
但那一时刻要叫我一声啊&lt;br&gt;
当鲜花重新挂上枝头&lt;/p&gt;
&lt;p&gt;《流浪地球》 &lt;em&gt;Wandering Earth&lt;/em&gt;&lt;br&gt;
刘慈欣&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;胖五加油！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/ucoLanfdR8I7TmCdT88KzA&#34;&gt;央视新闻&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595566460727.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;br&gt;
&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595566464577.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;br&gt;
&lt;img src=&#34;https://ZXYFrank.gitee.io/post-images/1595566468266.jpg&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/p&gt;
&lt;p&gt;人类固然渺小，却永恒地追问宇宙&lt;/p&gt;
&lt;p&gt;Though small, human beings keep passionate about the universe.&lt;/p&gt;
&lt;p&gt;每一个人都会分有一些探索的热情和求知的憧憬，和爱一样，这是我们的本能&lt;/p&gt;
&lt;p&gt;We share the passion about exploring, which is our instinct, the same as love.&lt;/p&gt;
&lt;div style=&#34;position: relative; padding: 30% 45%;&#34;&gt;
&lt;iframe style=&#34;position: absolute; width: 100%; height: 100%; left: 0; top: 0;&#34; src=&#34;https://player.bilibili.com/player.html?aid=42369133&amp;bvid=BV19b411k72G&amp;cid=74358853&amp;page=1&amp;as_wide=1&amp;high_quality=1&amp;danmaku=0&#34; frameborder=&#34;no&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;加油！中国航天！&lt;/strong&gt;&lt;/p&gt;
">天问</a>
      </div>
      
      <div class="item">
        <a class="result-title" style="opacity: 0;" href="https://ZXYFrank.gitee.io/post/about/"" data-c="
          &lt;blockquote&gt;
&lt;p&gt;欢迎来到我的小站呀，很高兴遇见你！🤝&lt;br&gt;
Welcome! Nice to meet you！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- more --&gt;
&lt;h2 id=&#34;关于本站-about-this-site&#34;&gt;🏠 关于本站 | About this site&lt;/h2&gt;
&lt;p&gt;This is xyz&#39;s blog, where xiaoyu records what he likes and has thought about.&lt;/p&gt;
&lt;h2 id=&#34;博主是谁-who-am-i&#34;&gt;👨‍💻 博主是谁 | Who am I?&lt;/h2&gt;
&lt;p&gt;You can call me Frank&lt;br&gt;
Xiaoyu in Chinese&lt;/p&gt;
&lt;h2 id=&#34;兴趣爱好-hobbies&#34;&gt;⛹ 兴趣爱好 | Hobbies&lt;/h2&gt;
&lt;p&gt;Singing, Composing&lt;br&gt;
Sports&lt;br&gt;
Reading&lt;br&gt;
Cooking&lt;/p&gt;
&lt;h2 id=&#34;联系我呀-contact&#34;&gt;📬 联系我呀 | Contact&lt;/h2&gt;
&lt;p&gt;frank_joy (at) onetwosix.com&lt;/p&gt;
">你好呀~Hello 😀</a>
      </div>
      
    </div>
    <div class="page">
      <div id="page_ul"></div>
    </div>
  </div>
</div>
<script>
  !function () {
    let searchMask = document.querySelector('#search_mask');
    let result = document.querySelector('#result');
    let items = document.querySelectorAll('.item');
    let searchBox = document.querySelector('#search');
    let statCount = document.querySelector('#stat_count');
    let statTimes = document.querySelector('#stat_times');
    let pageUl = document.querySelector('#page_ul');
    let close = document.querySelector('#close');
    
    close.addEventListener('click', function() {
      searchMask.style = 'display: none;'
    })

    let finds = [];
    let contents = [];
    let pageSize = 10;
    items.forEach(item => {
      let a = item.querySelector('a');
      contents.push({
        title: a.innerText,
        details: a.dataset.c,
        link: a.href
      })
      item.remove();
    })

    function insertStr(soure, start, count) {
      let newStr = soure.substr(start, count);
      return soure.slice(0, start) + '<em>' + newStr + '</em>' + soure.slice(start + count);
    }

    pageUl.addEventListener('click', function(event) {
      let target = event.target;
      if (target.__proto__ === HTMLSpanElement.prototype) {
        appendResults(parseInt(target.dataset.i));
      }
    })

    function appendResults(index) {
      let htmlResult = '';
      let start = index || 0;
      let end = Math.min(start + pageSize, finds.length);
      for (let i = start; i < end; i++) {
        const current = finds[i];
        let html = current.title;
        let sum = 0;
        let positions = current.positions;
        positions.forEach(position => {
          html = insertStr(html, position.start + sum, position.count);
          sum += 9;
        })
        htmlResult += `<div class="item"><a class="result-title" href="${current.link}">${html}</a></div>`;
      }
      result.innerHTML = htmlResult;
      pageUl.innerHTML = '';
      let count = finds.length / pageSize;
      let lis = '';
      if (start !== 0) {
        lis += `<span class="fa fa-angle-left" data-i='${start - 1}'></span>`;
      }
      for (let i = 0; i < count; i++) {
        lis += `<span class='${i === start?'current':''}' data-i='${i}'>${i+1}</span>`;     
      }
      if (start+1 < count) {
        lis += `<span class="fa fa-angle-right" data-i='${start+1}'></span>`;  
      }
      pageUl.innerHTML = lis;
    }

    function search(delay) {
      let timer = null
      return function () {
        clearTimeout(timer)
        timer = setTimeout(() => {
          let start = Date.now();
          let segments = searchBox.value.split(' ').filter(c => c != '');
          if (segments.length <= 0) {
            return;
          }
          finds = [];
          let htmlResult = '';
          contents.forEach(content => {
            let title = content.title;
            let positions = [];
            let find = false;
            segments.forEach((segment) => {
              if (content.title.includes(segment)) {
                find = true;
                positions.push({
                  start: content.title.indexOf(segment),
                  count: segment.length
                })
              } else if (content.details.includes(segment)) {
                find = true;
              }
            });
            if (find) {
              finds.push({
                title: content.title,
                link: content.link,
                positions
              });
            }
          })
          appendResults(0);
          statCount.textContent = finds.length;
          statTimes.textContent = Date.now() - start;
        }, delay)
      }
    }
    searchBox.addEventListener('input', search(200));
  }()
</script>

<input hidden id="copy" />
<script>
  !function () {
    let times = document.querySelectorAll('.publish-time');
    for (let i = 0; i < times.length; i++) {
      let date = times[i].dataset.t;
      let time = Math.floor((new Date().getTime() - new Date(date).getTime()) / 1000);
      if (time < 60) {
        str = time + '秒之前';
      } else if (time < 3600) {
        str = Math.floor(time / 60) + '分钟之前';
      } else if (time >= 3600 && time < 86400) {
        str = Math.floor(time / 3600) + '小时之前';
      } else if (time >= 86400 && time < 259200) {
        str = Math.floor(time / 86400) + '天之前';
      } else {
        str = times[i].textContent;
      }
      times[i].textContent = str;
    }
  }();
</script>

<script>
  let language = '';
  if (language !== '') {
    let map = new Map();
    if (language === 'en') {
      map.set('search', 'Search');
      map.set('category', 'Categories');
      map.set('article', 'Articles');
      map.set('tag', 'Tags');
      map.set('top', 'Top');
      map.set('publish', 'published');
      map.set('minute', ' minutes');
      map.set('read-more', 'Read More');
      map.set('view', 'View');
      map.set('words', ' words');
      map.set('category-in', 'category in');
      map.set('preview', 'Meta');
      map.set('index', 'Toc');
      map.set('no-archives', "You haven't created yet");
      map.set('archives', " articles in total");
      map.set('cloud-tags', " tags in total");
      map.set('copyright', "Copyright: ");
      map.set('author', "Author: ");
      map.set('link', "Link: ");
      map.set('leave-message', "Leave a message");
      map.set('format', "Links Format");
      map.set('site-name', "Name: ");
      map.set('site-link', "Link: ");
      map.set('site-desc', "Desc: ");
      map.set('stat', " related results, taking ");
      map.set('stat-time', " ms");
      map.set('site-img', "Image: ");
    }

    if (map.size > 0) {
      let lanElems = document.querySelectorAll('.language');
      lanElems.forEach(elem => {
        let lan = elem.dataset.lan, text = map.get(lan);
        if (elem.__proto__ === HTMLInputElement.prototype) {
          elem.placeholder = text
        } else {
          if (elem.dataset.count) {
            text = elem.dataset.count + text;
          }
          elem.textContent = text;
        }
      })
    }
  }
  //拿来主义(真香)^_^，Clipboard 实现摘自掘金 https://juejin.im/post/5aefeb6e6fb9a07aa43c20af
  window.Clipboard = (function (window, document, navigator) {
    var textArea,
      copy;

    // 判断是不是ios端
    function isOS() {
      return navigator.userAgent.match(/ipad|iphone/i);
    }
    //创建文本元素
    function createTextArea(text) {
      textArea = document.createElement('textArea');
      textArea.value = text;
      textArea.style.width = 0;
      textArea.style.height = 0;
      textArea.clientHeight = 0;
      textArea.clientWidth = 0;
      document.body.appendChild(textArea);
    }
    //选择内容
    function selectText() {
      var range,
        selection;

      if (isOS()) {
        range = document.createRange();
        range.selectNodeContents(textArea);
        selection = window.getSelection();
        selection.removeAllRanges();
        selection.addRange(range);
        textArea.setSelectionRange(0, 999999);
      } else {
        textArea.select();
      }
    }

    //复制到剪贴板
    function copyToClipboard() {
      try {
        document.execCommand("Copy")
      } catch (err) {
        alert("复制错误！请手动复制！")
      }
      document.body.removeChild(textArea);
    }

    copy = function (text) {
      createTextArea(text);
      selectText();
      copyToClipboard();
    };

    return {
      copy: copy
    };
  })(window, document, navigator);

  function copyCode(e) {
    if (e.srcElement.tagName === 'SPAN' && e.srcElement.classList.contains('copy-code')) {
      let code = e.currentTarget.querySelector('code');
      var text = code.innerText;
      if (e.srcElement.textContent === '复制成功') {
        return;
      }
      e.srcElement.textContent = '复制成功';
      (function (elem) {
        setTimeout(() => {
          if (elem.textContent === '复制成功') {
            elem.textContent = '复制代码'
          }
        }, 1000);
      })(e.srcElement)
      Clipboard.copy(text);
    }
  }

  let pres = document.querySelectorAll('pre');
  pres.forEach(pre => {
    let code = pre.querySelector('code');
    let copyElem = document.createElement('span');
    copyElem.classList.add('copy-code');
    copyElem.textContent = '复制代码';
    pre.appendChild(copyElem);
    pre.onclick = copyCode
  })

</script>
<script src="/media/js/motion.js"></script>

<script src="https://cdn.jsdelivr.net/gh/cferdinandi/smooth-scroll/dist/smooth-scroll.polyfills.min.js"></script>
<script>
  var scroll = new SmoothScroll('a[href*="#"]', {
    speed: 200
  });
</script>






</html>